2011-12-28 181 views
6

我在将堆栈跟踪打印到我的日志文件时出现问题。 Log4j.properties:log4j截断堆栈跟踪

log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=/var/log/app/application.log 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n 

log4j.rootLogger=warn, file 
log4j.logger.com.app=info, file 
log4j.additivity.com.app=false 

当我登录这样的异常在我的课UserGuard.java:

} catch (Exception e) { 
    log.error("Uncatched error", e); 
    response.setEntity(new StringRepresentation(" ")); 
    response.setStatus(Status.SERVER_ERROR_INTERNAL); 
} 

这导致我application.log:

2011-12-28 07:30:03 UserGuard [ERROR] Uncatched error 
java.lang.NullPointerException 

没有堆栈显示的痕迹。这真的很烦人。 谢谢!

在另一台机器上尝试了相同的pom.xml和相同的log4j.properties,并且正常工作。我应该认为这个问题是我的Java版本吗?

+0

'log4j.additivity.file = false' – 2011-12-28 12:59:48

+0

如果您使用不同的appender,例如ConsoleAppender,问题是否仍然存在?您是否尝试过运行启用了调试输出的log4j,以便您可以查看log4j配置中是否有任何错误? – chrisbunney 2011-12-28 13:02:16

+0

我确实尝试过都没有成功。查看我的编辑 – Gonzalo 2011-12-28 19:36:58

回答

6

你的堆栈跟踪最有可能得到截断由于热点的优化。优化只会构建有限次数的相同堆栈跟踪,然后来自同一确切位置的未来异常实例不会构建它。

您可以使用-XX:-OmitStackTraceInFastThrow标志关闭此优化,也可以返回到较早的日志以查找发生此异常的第一个实例(它会被记录一次,然后稍后进行优化)。

请参阅此相关的StackOverflow questionthis one,以及blog post over here

+1

非常感谢!那样做了! – Gonzalo 2013-01-14 14:53:56