日志打印无堆栈信息

情况:系统抛出异常,日志没有打印堆栈信息 错误日志正常打印

分析:异常信息打印格式没有错误,本地测试没有问题,线上其他环境也没有类似的情况。 可能是jvm禁掉了某些

东西,导致了异常信息没有打印出来

资料:https://stackoverflow.com/questions/2295015/log4j-not-printing-the-stacktrace-for-exceptions

https://www.oracle.com/technetwork/java/javase/relnotes-139183.html

虚拟机部分
The compiler in the server VM now provides correct stack backtraces for all "cold" built-in exceptions. For performance purposes, when such an exception is thrown a few times, the method may be recompiled. After recompilation, the compiler may choose a faster tactic using preallocated exceptions that do not provide a stack trace. To disable completely the use of preallocated exceptions, use this new flag: -XX:-OmitStackTraceInFastThrow.
译文:服务器VM中的编译器现在为所有“冷”内置异常提供正确的堆栈回溯。出于性能目的,当抛出这样的异常几次时,可以重新编译该方法。重新编译之后,编译器可以使用不提供堆栈跟踪的预分配异常来选择更快的策略。要完全禁用预分配的异常,请使用以下新标志: -XX:-OmitStackTraceInFastThrow。

结论:虚拟机打印堆栈超过一定次数以后,会关闭掉异常堆栈的打印,通过-XX:-OmitStackTraceInFastThrow

参数可禁用 掉该优化

你可能感兴趣的:(日志打印无堆栈信息)