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打印完整堆栈信息的资料请关注脚本之家其它相关文章!

相关文章

  • JAVA8 的StringJoiner 使用及原理解析

    JAVA8 的StringJoiner 使用及原理解析

    这篇文章主要介绍了JAVA8 的StringJoiner 使用及原理解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java异常处理 Throwable实现方法解析

    Java异常处理 Throwable实现方法解析

    这篇文章主要介绍了Java异常处理 Throwable实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • springboot整合netty-mqtt-client实现Mqtt消息的订阅和发布示例

    springboot整合netty-mqtt-client实现Mqtt消息的订阅和发布示例

    本文主要介绍了springboot整合netty-mqtt-client实现Mqtt消息的订阅和发布示例,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • SSH框架网上商城项目第23战之在线支付功能实现

    SSH框架网上商城项目第23战之在线支付功能实现

    这篇文章主要为大家详细介绍了SSH框架网上商城项目第23战之在线支付功能实现,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 浅析JavaMail发送邮件后再通过JavaMail接收格式问题

    浅析JavaMail发送邮件后再通过JavaMail接收格式问题

    这篇文章主要介绍了JavaMail发送邮件后再通过JavaMail接收格式问题 ,本文通过代码实例给大家详细解说,需要的朋友可以参考下
    2019-06-06
  • Java设计模式中单一职责原则详解

    Java设计模式中单一职责原则详解

    这篇文章主要介绍了Java设计模式中单一职责原则详解,单一职责原则 (SRP) 是软件设计中的一个重要原则,它要求每个类只负责一个职责,需要的朋友可以参考下
    2023-05-05
  • HTTP 与 SpringBoot 参数提交与接收协议方式

    HTTP 与 SpringBoot 参数提交与接收协议方式

    HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据请求方法和Content-Type差异,SpringBoot通过特定注解如@RequestParam、@RequestBody实现数据获取,本文介绍HTTP与SpringBoot参数提交与接收协议方式,感兴趣的一起看看
    2025-07-07
  • Java实现自定义中文排序的方法机注意事项

    Java实现自定义中文排序的方法机注意事项

    在Java中,中文排序通常涉及到使用Collator类来处理字符串的比较,确保根据汉字的拼音顺序进行排序,本文给大家介绍了Java实现自定义中文排序的方法机注意事项,并有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-10-10
  • 详解Java的Spring框架中bean的定义以及生命周期

    详解Java的Spring框架中bean的定义以及生命周期

    这篇文章主要介绍了Java的Spring框架中bean的定义以及生命周期,bean的实例化是Java web开发中的重要基础,需要的朋友可以参考下
    2015-12-12
  • Java中程序的运行全过程

    Java中程序的运行全过程

    这篇文章主要介绍了Java中程序的运行全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论