Java如何打印完整的堆栈信息

 更新时间:2023年05月17日 09:51:25   作者:wangjuntytl  
这篇文章主要为大家介绍了Java如何打印完整的堆栈信息示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Java print full StackTrace

我们在编写一些组件时,使用的日志系统有时并不能打印完整的堆栈信息,比如slf4j,log4j,我们在调用log.error("found error ...",e)打印异常时,只打印一行异常信息。我们看下slf4j的源码

/**
   * Log an exception (throwable) at the ERROR level with an
   * accompanying message.
   *
   * @param msg the message accompanying the exception
   * @param t   the exception (throwable) to log
   */
  public void error(String msg, Throwable t);

它在打印exception时,只是打印了堆栈当中的第一行Throwable的信息, 而我们想要的是把整个堆栈都打印出来,这时我们会用下面方式打印堆栈信息。

demo

e.printStackTrace()

堆栈信息定向到日志文件中

这虽然打印了完整的堆栈信息,但它并不会把堆栈信息定向到日志文件中,这时我们就需要利用输出流把信息重新定到变量中,然后再送入到日志系统中

/**
     * 完整的堆栈信息
     *
     * @param e Exception
     * @return Full StackTrace
     */
    public static String getStackTrace(Exception e) {
        StringWriter sw = null;
        PrintWriter pw = null;
        try {
            sw = new StringWriter();
            pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            pw.flush();
            sw.flush();
        } finally {
            if (sw != null) {
                try {
                    sw.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (pw != null) {
                pw.close();
            }
        }
        return sw.toString();
    }

然后我们这样调用就解决了这个问题

log.error("fount error...", getStackTrace(e))

以上就是Java如何打印完整的堆栈信息的详细内容,更多关于Java打印完整堆栈信息的资料请关注脚本之家其它相关文章!

相关文章

  • Java通过URL类下载图片的实例代码

    Java通过URL类下载图片的实例代码

    这篇文章主要介绍了Java通过URL类下载图片,文中结合实例代码补充介绍了java通过url获取图片文件的相关知识,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • Spring超详细讲解面向对象到面向切面

    Spring超详细讲解面向对象到面向切面

    面向对象编程是一种编程方式,此编程方式的落地需要使用“类”和 “对象”来实现,所以,面向对象编程其实就是对 “类”和“对象” 的使用,面向切面编程,简单的说,就是动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程
    2022-08-08
  • 教你创建springcloud微服务的基础子服务的超详细过程

    教你创建springcloud微服务的基础子服务的超详细过程

    这篇文章主要介绍了创建springcloud微服务的基础子服务,主要是创建两个springboot服务,在教程中增加springcloud相关组件,本文分步骤给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • druid升级后sql监控页面为空白的解决

    druid升级后sql监控页面为空白的解决

    这篇文章主要介绍了druid升级后sql监控页面为空白的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java8 ArrayList之forEach的使用

    Java8 ArrayList之forEach的使用

    这篇文章主要介绍了Java8 ArrayList之forEach的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java解析XML的四种方式

    Java解析XML的四种方式

    本文详细讲解了Java解析XML的四种方式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 带你快速搞定java多线程(4)

    带你快速搞定java多线程(4)

    这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下
    2021-07-07
  • java与JSON数据的转换实例详解

    java与JSON数据的转换实例详解

    这篇文章主要介绍了java与JSON数据的转换实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java指令重排引发问题及解决方案

    Java指令重排引发问题及解决方案

    指令重排是JVM在解释执行Java代码时对指令顺序进行重新排列的一种优化技术,本文主要介绍了Java指令重排引发问题及解决方案,感兴趣的可以了解一下
    2023-08-08
  • Spring IOC 注入的3种方式小结

    Spring IOC 注入的3种方式小结

    Spring IoC容器支持多种依赖注入方式,本文主要介绍了Spring IOC 注入的3种方式小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08

最新评论