美文网首页
log exception without trace 异常信息

log exception without trace 异常信息

作者: 赵帅_a4fe | 来源:发表于2019-02-19 18:10 被阅读22次

1.可用率报警后查看异常日志,发现打印的异常信息,没有堆栈信息

2.检查日志打印格式,是按照异常对象打印的,是正确的打印方式,代码如下

       try {
            ......
        } catch (Throwable t){
            LOGGER.error(ThreadLocalUtil.get() + "批量获取距离异常:", t);
            ......
        } finally {
            ThreadLocalUtil.clear();
        }

3.继续查询相关资料,发现是jvm做的优化

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.

虚拟机打印堆栈超过一定次数以后,会关闭掉异常堆栈的打印,通过-XX:-OmitStackTraceInFastThrow 参数可禁用掉该优化

4.测试复现验证,代码如下

public class ExceptionTraceTest {
    public static void main(String[] args) {
        int i =0;
        String test = null;
        while (true){
            try {
                test.length();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

最开始的输出,异常信息中有堆栈信息

java.lang.NullPointerException
    at com.shuaisam.reboot.jvm.param.ExceptionTraceTest.main(ExceptionTraceTest.java:14)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
java.lang.NullPointerException
    at com.shuaisam.reboot.jvm.param.ExceptionTraceTest.main(ExceptionTraceTest.java:14)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

输出一定数量以后,异常信息中只有异常message信息,没有了堆栈

java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException

5.加入jvm参数 -XX:-OmitStackTraceInFastThrow 重新运行代码

继续运行,一段时间后异常仍然全部打印出了堆栈,现象符合预期

6.解决办法

  • 历史日志还在的话,查看历史日志异常堆栈
  • 重新启动服务器,再观察日志
  • 设置JVM参数,暂时禁止掉这个优化选项: -XX:-OmitStackTraceInFastThrow

7.参考资料

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

相关文章

  • log exception without trace 异常信息

    1.可用率报警后查看异常日志,发现打印的异常信息,没有堆栈信息 2.检查日志打印格式,是按照异常对象打印的,是正确...

  • java log 性能优化

    首先俩个有什么区别呢?log.trace("trace: " + exception.getMessage());...

  • Python学习笔记(3)

    Python 术语 “异常”(exception)因运行时错误而出现, 会产生一个traceback “trace...

  • MyBatis连接MySQL出错:No operations a

    异常信息org.hibernate.exception.JDBCConnectionException: coul...

  • CopyOnWriteArrayList 不支持 Collect

    异常信息: Exception in thread "main" java.lang.UnsupportedOpe...

  • Without a trace 0103

    好吧我要使用网上的梗概省去基本剧情叙述了。 邓肯·穆勒和艾米莉·穆勒经过整整一天的购物后,穿过马路向他们停在对面的...

  • Without a trace 0105

    密探组这次接到了寻找十七岁的安迪·蒂夫的任务。接到报案后,杰克第一时间对校长产生了怀疑。斯波尔丁校长曾经做过兽医,...

  • Without a trace 0107

    一个刚学会走路的幼儿艾比在公园空地上和另一个孩子嬉戏时被拐走了。她母亲是享有盛誉的纽约助理地区检察官安吉拉-布克曼...

  • Without a trace 0102

    一切总发生在看似正常的生活中,一个爸爸带过生日的11岁男孩去看Yankees比赛,坐地铁时没坐上一辆,孩子就此不见...

  • Without a trace 0106

    剧情介绍(摘)一位纽约商人帕特里克-肯特办理完归家航班的登机手续之后就失踪了。密探组调查中震惊地发现,失踪者肯特一...

网友评论

      本文标题:log exception without trace 异常信息

      本文链接:https://www.haomeiwen.com/subject/topeeqtx.html