如何配置log4j

我的环境是struts2.1.6, 使用commons-logging-1.1.1.jar

我配置log4j的步骤如下:

  1. 将log4j-1.2.9.jar拷贝到WEB-INF/lib目录下
  2. 在WEB-INF/classes下建立log4j.properties文件,文件内容如下:

[code="java"]log4j.rootLogger=ERROR, errfile

log4j.appender.errfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errfile.File=D:\bugu_err.log
log4j.appender.errfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errfile.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n[/code]

  1. java代码如下:
    [code="java"]public class ExceptionLogInterceptor extends AbstractInterceptor
    {
    private final Log log = LogFactory.getLog(getClass());
    static Logger logger = Logger.getLogger(ExceptionLogInterceptor.class.getName());

    public String intercept(ActionInvocation invocation) throws Exception
    {
    String result = "";
    try {

        result = invocation.invoke();
    
    } catch (Exception e) {
        System.out.print("exception log");
        log.error("log4j:" + e.getMessage());
        logger.error("test log4j 1.2.9");
    }
    
    return result;
    

    }
    }[/code]

问题:运行程序之后并没有生成D:\bugu_err.log文件(控制台已打出"exception log"信息,即log.error("log4j:" + e.getMessage()) 和 logger.error("test log4j 1.2.9")有被执行到)

请教:应该如何正确配置log4j,以及代码里面应该如何正确调用log4j写log?谢谢!

[b]问题补充:[/b]
to lwx_1987:

怎样"在应用程序启动时对log4j进行初始化"?能否详细点?

配置文件内容:

LOGGER

configure root Logger

log4j.rootLogger=INFO,console,file,errorfile
#define a logger named accessLogger
log4j.logger.accessLogger=INFO,accessfile
log4j.logger.serverInfoLogger=INFO,serverInfoFile

APPENDERS

define an appender named console, which is set to be a ConsoleAppender

log4j.appender.console=org.apache.log4j.ConsoleAppender

define an appender named file, which is set to be a DailyRollingFileAppender

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${log4jHome}/info/syslog
log4j.appender.file.DatePattern=yyyy-MM-dd'.txt'
log4j.appender.file.Append=true

log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.File=${log4jHome}/error/log
log4j.appender.errorfile.DatePattern=yyyy-MM-dd'.txt'
log4j.appender.errorfile.Threshold=ERROR
log4j.appender.file.Append=true

log4j.appender.accessfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.accessfile.File=${log4jHome}/info/accesslog
log4j.appender.accessfile.DatePattern=yyyy-MM-dd'.txt'

log4j.appender.serverInfoFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.serverInfoFile.File=${log4jHome}/info/serverInfoFile
log4j.appender.serverInfoFile.DatePattern=yyyy-MM-dd'.txt'


java代码
在应用程序启动时对log4j进行初始化:
public void contextInitialized(ServletContextEvent ctxEvt){
ServletContext ctx = ctxEvt.getServletContext();
String WEB_ROOT = ctx.getRealPath("/");
//log4j文件位置
String log4jFile = WEB_ROOT + "WEB-INF" + File.separator + "cfg"+ File.separator + "log4j.properties";
//日志输出位置
String log4jHome = WEB_ROOT + "WEB-INF" + File.separator + "logs";
//对日志输出位置进行set
System.setProperty("log4jHome", log4jHome);
//进行配置
PropertyConfigurator.configure(log4jFile);
}
这样就OK了!