Tomcat应用程序日志未显示完整的堆栈跟踪

时间:2017-08-03 06:28:35

标签: java tomcat exception stack-trace

在Tomcat上运行Web应用程序。我使用slf4j / logback记录异常及其堆栈跟踪。 e.g。

2017-08-01 00:00:00.000 [http-nio-80-exec-5] ERROR g.s.GuiceyRequestFactoryServlet - 'Server Failure'
java.lang.reflect.InvocationTargetException: null
...
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.0.33]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_131]
Caused by: ...
    ... 59 common frames omitted
Caused by: ...
    ... 64 common frames omitted
java.lang.NullPointerException: null

因为导致NPE的真实位置在至少两次反射调用中嵌套了几级,不确定是否就是这种情况,Tomcat / slf4j / logback没有显示完整的堆栈跟踪并且在NPE处停止,而不是进一步下来。

我期待像是这样的东西。

2017-08-01 00:00:00.000 [http-nio-80-exec-5] ERROR g.s.GuiceyRequestFactoryServlet - 'Server Failure'
java.lang.reflect.InvocationTargetException: null
...
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.0.33]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_131]
Caused by: ...
    ... 59 common frames omitted
Caused by: ...
    ... 64 common frames omitted
Caused by: java.lang.NullPointerException: null
    at java.util.Calendar.setTime(Calendar.java:1770) ~[na:1.8.0_60]
    ... 80 common frames omitted

即。在日志中显示更深的堆栈跟踪。有谁知道我应该在哪里看看以及如何实现这一目标?例如Tomcat配置? logback配置? slf4j方法?

修改

对于那些认为这是一个其他问题的重复,询问那些" ... xx常见帧省略",不,我不关心这些行。我问的是最后一个NPE没有全部打印出来。请先仔细准备好。

2 个答案:

答案 0 :(得分:0)

这应该可以使用 -XX:-OmitStackTraceInFastThrow 选项。

答案 1 :(得分:-1)

......省略了59个框架仅意味着之前已经打印过这些例外情况。在Logback中,您可以重新构建堆栈轨道以避免重复,并始终以正确的顺序打印堆栈行。