龙空技术网

Java 线上日志不打印异常堆栈信息原因

王朋code 91

前言:

今天兄弟们对“linux堆栈异常分析”都比较看重,你们都需要学习一些“linux堆栈异常分析”的相关资讯。那么小编也在网上汇集了一些对于“linux堆栈异常分析””的相关知识,希望我们能喜欢,小伙伴们一起来学习一下吧!

最近遇到一个很奇怪的问题:生产环境中代码执行报错,然后我去生产环境查询日志的时候发现日志中只打印一行错误信息,并没有打印堆栈信息。然后我查询了代码中的日志打印:

log.error(" %%%%%%创建待办任务异常createTask error:{}", e.getMessage(), e);

这行代码会打印报错的堆栈信息,但是日志中为啥会没有打印呢?

经过测试发现, 是 java 的默认优化导致。

其实我们代码中是正常打印日志的代码,不过, 当相同位置发生相同异常达到一定次数 (具体次数不一定), 就会自动省略堆栈信息, 剩下一句孤零零的 null,对于我们排查问题, 非常致命, 无法准确定位异常发生原因。为了避免忽略打印堆栈的情况, 我们可以显式指定 jvm 参数:

//表示禁用省略堆栈-XX:-OmitStackTraceInFastThrow 

标签: #linux堆栈异常分析