2012-06-14 48 views
0

我有一个web应用程序,运行在Windows上的Tomcat 7的vanilla安装中,内部Tomcat日志保持不变(默认)。在我的应用程序中,我使用了log4j,它有一个RollingFileAppender写入TOMCAT/logs目录(而不是localhost.yyyy-mm-dd.log)中我自己的应用程序日志(app.log)。日志似乎对我的应用程序工作正常,只是某些堆栈跟踪不显示在app.log中,而是显示在localhost.yyyy-mm-dd.log中。例如,我的应用程序缺少commons-validators类,并且此堆栈跟踪未显示在app.log中。在Tomcat中使用Log4j进行应用程序日志记录7

我不知道如何让这些堆栈跟踪显示在我的app.log?我的log4j.properties文件在这里:

### Root Level ### 
log4j.rootLogger=WARN, LOGFILE 

### Application Level ### 
log4j.logger.com.ccn=TRACE 

### Spring ### 
log4j.logger.org.springframework.core=INFO 
log4j.logger.org.springframework.beans=INFO 
log4j.logger.org.springframework.context=INFO 
log4j.logger.org.springframework.web=INFO 

### Configuration for the LOGFILE appender ### 
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender 
log4j.appender.LOGFILE.MaxFileSize=5MB 
log4j.appender.LOGFILE.MaxBackupIndex=10 
log4j.appender.LOGFILE.File=$\{catalina.home\}/logs/app.log 
log4j.appender.LOGFILE.Append=true 
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.LOGFILE.layout.ConversionPattern=[%p %d %t] %c [%C{1}.%M(): "%m"]%n 

回答

1

我发现这个问题。我正在使用org.springframework.stereotype.Controller注释来标记我的控制器类。我正在失去的具体例外是在这个班里产生的。该解决方案是一个@ExceptionHandler标注添加到类中的方法,我可以重定向例外Log4J采用类似这样:

@ExceptionHandler 
public void handleException(Exception e) { 
    logger.error("Error: ", e); 
} 

没有@ExceptionHandler装饰方法的堆栈跟踪正在吐出到stderr从而结束在localhost.yyyy-mm-dd.log中。

0

你如何做堆栈跟踪日志?

在我的情况下,

Logger log = Logger.getLogger(HogeServlet.class); 
try { 
    // Something 
} catch (HogeException e) { 
    log.error("Hoge Error !!", e); // Print stack trace 
} 
+0

是的,这也是我的做法。 – Tom

相关问题