Java 日志中异常信息缺少堆栈信息
Java JVM About 1,219 words现象
生产环境下日志输出的异常只有一行异常名称,没有具体的堆栈信息。
示例
public class OmitStackTraceInFastThrowDemo {
public static void main(String[] args) {
for (long i = 0; i < 10000000; i++) {
try {
int tmp = 1/0;
} catch (Exception e) {
if (null != e.getStackTrace() && e.getStackTrace().length == 0) {
e.printStackTrace();
return;
}
}
}
}
}
输出
java.lang.ArithmeticException
正常输出
java.lang.ArithmeticException: / by zero
at OmitStackTraceInFastThrowDemo.main(OmitStackTraceInFastThrowDemo.java:6)
OmitStackTraceInFastThrow
快速抛出异常,忽略堆栈信息。
默认是启用的,即:大量出现相同地方的异常时,只输出异常名称,不输出堆栈信息。
❯ java -XX:+PrintFlagsFinal -version | grep OmitStackTraceInFastThrow
bool OmitStackTraceInFastThrow = true {product} {default}
openjdk version "17.0.7" 2023-04-18 LTS
OpenJDK Runtime Environment Corretto-17.0.7.7.1 (build 17.0.7+7-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.7.7.1 (build 17.0.7+7-LTS, mixed mode, sharing)
建议
生产环境如果有大量日志输出,异常信息很容易被冲掉,建议关闭这个选项。即每次都打印堆栈信息。
-XX:-OmitStackTraceInFastThrow
参考
Views: 612 · Posted: 2023-12-13
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...