诚信请教Log4输出日志文件问题,急,急,急

我用struts2+ibatis搭建的框架,在日志文件输出的时候遇到这个问题很是纠结,希望大家帮个忙解释哈……,谢谢了

首先我在log4的资源文件中配置如下:
[img]http://dl.iteye.com/upload/attachment/533623/370df173-5525-3a13-925f-206474bedcce.jpg[/img]
然后我启动项目,我测试日志输出的代码写在登录方法里面代码如下:
[img]http://dl.iteye.com/upload/attachment/533626/c9a12f46-cb94-39e0-a22a-7dc404790c17.jpg[/img]

然后运行发现:有日志文件在handlog.log文件在D:\workspace.metadata.me_tcat\webapps\Own_Project\log目录下面,

后面 我写了个测试类代码如下:
[img]http://dl.iteye.com/upload/attachment/533628/a01a23f1-0579-3ec9-912c-156f0e7dc2c6.jpg[/img]

运行后发现:有日志文件在handlog.log文件在D:\workspace.metadata.me_tcat\webapps\Own_Project\log目录下面,
log4的资源文件配置改成如下:
[img]http://dl.iteye.com/upload/attachment/533630/0211c3c6-95d7-351c-a08b-fdfa88922707.jpg[/img]

最后,我改了登录方法代码如下:
[img]http://dl.iteye.com/upload/attachment/533632/e61161cd-145e-35f4-a070-70ef6cefce30.jpg[/img]

log4的配置文件和上面那个是一样的都是动态的那种,但是我怎么测试都输出不了日志文件???这是为什么呢???

4个回答

"LOG_DIR"是个变量,会被System Property中的“WORKDIR”的值代替,
但是这个有个前提是
在log4j加载配置文件之前,先用System.setProperty设置好“WORKDIR”的值。而你在加载log4j配置文件前根本没设置“WORKDIR”的值。
[code="java"]
public class Log4jInit extends HttpServlet {
static Logger logger = Logger.getLogger(Log4jInit.class);
public Log4jInit() {

}


public void init(ServletConfig config) throws ServletException {
    String prefix = config.getServletContext().getRealPath("/");
    String file = config.getInitParameter("log4j");
    String filePath = prefix + file;
    Properties props = new Properties();
    try {
          FileInputStream istream = new FileInputStream(filePath);
          props.load(istream);
          istream.close();
          ));
          //设置路径
          String logFile = prefix + props.getProperty("log4j.appender.handLog.file");
          props.setProperty("log4j.appender.handLog.File",logFile);
          PropertyConfigurator.configure(props);//装入log4j配置信息
    } catch (IOException e) {
        toPrint("Could not read configuration file [" + filePath + "].");
        toPrint("Ignoring configuration file [" + filePath + "].");
        return;
    }


}


public static void toPrint(String content) {
    System.out.println(content);
}

}
[/code]
[code="xml"]

log4j-init
Log4jInit

log4j
WEB-INF/classes/log4j.properties


[/code]

这取决于log4j.properties先被装载,还是LOG_DIR系统属性先被定义。

根据常识,log4j一开始就装载了那个log4j.properties,那时候LOG_DIR还没定义呢。而当login()被调用的时候你定义LOG_DIR,已经晚了。log4j不会因此重新装载那个配置文件。所以没用。

不应该在login的地方再设置路径吧。
应该在系统启动的时候就设置路径然后再装在Log4J
在一个Servlet的init方法中做

楼上的童鞋说的是,你如果需要在log4j配置文件中使用环境变量,必须在log4j初始化之前设置好,而且一旦log4j初始化完成后,在改变环境变量来说是没有用的,因为log4j初始化是已经把环境变量直接替换成真实的值了。
你可以看看Spring里的Log4jConfigListener的做法。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐