为了我的目的,我正在使用带有 EnhancedPatternLayout 的 log4j 1.2.16 和根记录器。
代码是这样的(在 ScheduledFuture 中捕获异常):
try
{
_task.run();
}
catch(RejectedExecutionException ree) {}
catch (Exception e)
{
log.error("Exception in a scheduled task:", e);
}
这就是接下来发生的事情,某些类型的异常不会在日志文件中留下任何堆栈跟踪。
这是 NPE 的正常日志:
[24.11.12 11:08:31] Exception in a scheduled task:
java.lang.NullPointerException
at com.test.server.taskmanager.TestTask$1.run(TestTask.java:116)
at com.test.server.threading.RunnableWrapper.execute(RunnableWrapper.java:65)
at com.test.server.threading.RunnableWrapper.run(RunnableWrapper.java:57)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
.....
接下来是 ClassCastException:
[24.11.12 11:16:37] ...
[24.11.12 11:18:30] Exception in a scheduled task:
java.lang.ClassCastException
[24.11.12 11:18:37] ...
[24.11.12 11:20:37] ...
[24.11.12 11:21:51] Exception in a scheduled task:
java.lang.ClassCastException
[24.11.12 11:22:37] ...
我不明白.. ClassCastException 的堆栈跟踪在哪里?
为什么会发生这种情况,有没有办法解决这个问题?