【发布时间】:2018-01-10 14:27:51
【问题描述】:
在 Tomcat 上运行了一个 Web 应用程序。我使用 slf4j/logback 记录异常及其堆栈跟踪。例如
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配置?回退配置? slf4j 方法?
编辑
对于那些认为这是其他一些问题的重复,这些问题询问那些“... xx common frames省略”,不,我不在乎这些行。我在问最后一个 NPE 根本没有打印。请先做好准备。
【问题讨论】:
-
@TechnoCrat 你问错了。我不在乎那些省略的行。我关心最后一个 NPE 根本没有打印。
-
我收回了旗帜。什么是 NPE?
-
NullPointerException 的简写形式。因此,当您调用invoke 时,它会将真正的异常包装在InvocationTargetException 中。多次调用invoke,异常的真正原因变成了多层次下。所以第一个例子它停止打印 NPE 的堆栈跟踪,我猜是因为它太深了?我希望看到的是第二个示例,其中也打印了 NPE 的堆栈跟踪。
标签: java tomcat exception stack-trace