我的环境是struts2.1.6, 使用commons-logging-1.1.1.jar
我配置log4j的步骤如下:
[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]
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进行初始化"?能否详细点?
配置文件内容:
log4j.rootLogger=INFO,console,file,errorfile
#define a logger named accessLogger
log4j.logger.accessLogger=INFO,accessfile
log4j.logger.serverInfoLogger=INFO,serverInfoFile
log4j.appender.console=org.apache.log4j.ConsoleAppender
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了!