浅谈log4j 不打印异常堆栈

 更新时间:2018年02月05日 10:55:17   作者:蓝精灵lx  
这篇文章主要介绍了浅谈log4j 不打印异常堆栈,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

本文研究的主要是log4j 不打印异常堆栈的相关内容,具体如下。

最近在线上系统的错误日志中发现了一个现象:

代码里用log4j打印系统运行时异常堆栈信息,在错误日志中无法看到堆栈信息,只有异常信息。这对于程序员来说是一个打击,没有堆栈信息何从查bug啊。

[01-15 11:29:26] [ERROR] [org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer:524] Unexpected throwable while invoking!

后来发现这个是jdk的一个优化。JVM 为了性能会做优化,如果频繁的抛出某个异常,会重新编译,不再打印异常堆栈。

解决这个问题也比较简单,如果不想每次都去查前面的 log 去看堆栈,只要在启动参数加上 -XX:-OmitStackTraceInFastThrow,就可以禁用该优化,强制打印异常堆栈。这样可能会导致,log 文件过大,不过产线上今天之前的 log 文件都会被压缩,所以感觉问题也不大。

[01-15 16:40:09] [ERROR] [org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer:524] Unexpected throwable while invoking!
java.lang.NullPointerException
at com.iqiyi.ttbrain.recommend.selector.services.FilterService.filter2(FilterService.java:42)
at com.iqiyi.ttbrain.recommend.thrift.IFilterService$Processor$filter2.getResult(IFilterService.java:181)
at com.iqiyi.ttbrain.recommend.thrift.IFilterService$Processor$filter2.getResult(IFilterService.java:166)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
at org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.invoke(AbstractNonblockingServer.java:518)
at org.apache.thrift.server.Invocation.run(Invocation.java:18)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

总结

以上就是本文关于浅谈log4j 不打印异常堆栈的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • 分享Spring Cloud OpenFeign 的五个优化技巧

    分享Spring Cloud OpenFeign 的五个优化技巧

    这篇文章主要分享的是Spring Cloud OpenFeign 的五个优化技巧,OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件,更多相关内容需要的小伙伴可以参考一下
    2022-05-05
  • 解决使用redisTemplate高并发下连接池满的问题

    解决使用redisTemplate高并发下连接池满的问题

    这篇文章主要介绍了解决使用redisTemplate高并发下连接池满的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 关于TransmittableThreadLocal线程池中线程复用问题的解决方案

    关于TransmittableThreadLocal线程池中线程复用问题的解决方案

    这篇文章主要介绍了关于TransmittableThreadLocal线程池中线程复用问题的解决方案,线程池复用线程,如果子线程执行完未移除上下文,则会导致后续线程可以取到之前线程设置的属性,需要的朋友可以参考下
    2023-11-11
  • BiConsumer接口中的方法andThen accept使用详解

    BiConsumer接口中的方法andThen accept使用详解

    这篇文章主要为大家介绍了BiConsumer接口中的方法andThen accept使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Java8方法引用和构造引用代码实例

    Java8方法引用和构造引用代码实例

    这篇文章主要介绍了java8方法引用和构造引用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Springboot中项目的属性配置的详细介绍

    Springboot中项目的属性配置的详细介绍

    很多时候需要用到一些配置的信息,这些信息可能在测试环境和生产环境下会有不同的配置,本文主要介绍了Springboot中项目的属性配置的详细介绍,感兴趣的可以了解一下
    2022-01-01
  • java 8 lambda表达式中的异常处理操作

    java 8 lambda表达式中的异常处理操作

    这篇文章主要介绍了java 8 lambda表达式中的异常处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java定时/延时任务之Timer用法详解

    Java定时/延时任务之Timer用法详解

    在 Java Development Kit (JDK) 中,java.util.Timer 是一个用于调度任务的工具类,本文主要来和大家聊聊Timer的用法,有需要的小伙伴可以了解下
    2024-12-12
  • JVM致命错误日志详解(最新推荐)

    JVM致命错误日志详解(最新推荐)

    这篇文章主要介绍了JVM致命错误日志详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Java服务假死后续之内存溢出的原因分析

    Java服务假死后续之内存溢出的原因分析

    这篇文章主要介绍了Java服务假死后续之内存溢出,本文给大家分享原因排查和故障解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论