我有一个问题,打印堆栈跟踪到我的日志文件。log4j . properties:
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("Uncaught error", e);
response.setEntity(new StringRepresentation(" "));
response.setStatus(Status.SERVER_ERROR_INTERNAL);
}
结果是my application.log:
2011-12-28 07:30:03 UserGuard [ERROR] Uncaught error
java.lang.NullPointerException
没有显示堆栈跟踪。这真的很烦人。谢谢!
尝试使用相同的pom.xml和相同的log4j。属性在另一台机器上运行正常。我应该认为问题是我的java版本吗?
由于Hotspot中的优化,您的堆栈跟踪最有可能被截断。优化只构建相同的堆栈跟踪有限的次数,然后从相同位置的异常的未来实例不会构建它。
您可以使用-XX:-OmitStackTraceInFastThrow
标志关闭此优化,或者返回到较早的日志中查找此异常发生的第一个实例(它记录一次,然后稍后进行优化)。
查看这个相关的StackOverflow问题,这个问题,以及这里的这篇博客文章
log4j有一个增强:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/EnhancedPatternLayout.html