0

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

我不确定如何让这些堆栈跟踪显示在我的 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
4

2 回答 2

1

我发现了问题。我正在使用 org.springframework.stereotype.Controller 注释来标记我的控制器类。我丢失的特定异常是在这个类中生成的。解决方案是向类中的方法添加@ExceptionHandler注释,在该方法中我可以将异常重定向到 Log4j,类似于:

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

如果没有@ExceptionHandler修饰方法,堆栈跟踪将被吐出到 stderr,最终出现在 localhost.yyyy-mm-dd.log 中。

于 2012-06-22T14:18:04.873 回答
0

您如何进行堆栈跟踪日志记录?

就我而言,

Logger log = Logger.getLogger(HogeServlet.class);
try {
    // Something
} catch (HogeException e) {
    log.error("Hoge Error !!", e); // Print stack trace
}
于 2012-06-20T01:36:32.720 回答