今天遇到个java.lang.NullPointerException: null,发现没有堆栈信息,无法定位。看了下代码,按道理是会打印堆栈的啊。
try {
...
} catch(Throwable e) {
log.error("", e);
}
查了下(https://stackoverflow.com/questions/2411487/nullpointerexception-in-java-with-no-stacktrace),发现是log的优化,如果NPE在代码中同一个地方出现多次,log会进行优化,不再打印堆栈信息。
也就是说,最开始的时候是会打印错误堆栈的。
翻日志到错误最早发生的地方,果然发现有打印错误堆栈。
另外,有很多人说是jdk的bug,在启动时加启动参数 -XX:-OmitStackTraceInFastThrow 也可以解决。