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

参考

https://juejin.cn/post/6967908573649043492

Views: 612 · Posted: 2023-12-13

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh