Gon*_*alo 6 java log4j truncate exception stack-trace
我在将堆栈跟踪打印到我的日志文件时遇到问题.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
Run Code Online (Sandbox Code Playgroud)
当我在我的类UserGuard.java中记录这样的异常时:
} catch (Exception e) {
log.error("Uncaught error", e);
response.setEntity(new StringRepresentation(" "));
response.setStatus(Status.SERVER_ERROR_INTERNAL);
}
Run Code Online (Sandbox Code Playgroud)
这导致我的application.log:
2011-12-28 07:30:03 UserGuard [ERROR] Uncaught error
java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
没有显示堆栈跟踪.这真的很烦人.谢谢!
在另一台机器上尝试使用相同的pom.xml和相同的log4j.properties并且正常工作.我应该认为问题是我的java版本吗?
由于Hotspot中的优化,您的堆栈跟踪很可能会被截断.优化仅构建相同的堆栈跟踪有限次数,然后来自同一确切位置的异常的未来实例不会构建它.
您可以使用-XX:-OmitStackTraceInFastThrow标志关闭此优化,或者返回到早期日志以查找此异常发生的第一个实例(它已记录一次,然后稍后进行优化).
请参阅此相关的StackOverflow问题,以及此文章和此博客文章.