行业资讯 2025年08月6日
0 收藏 0 点赞 734 浏览 1564 个字
摘要 :

文章目录 1.使用StringWriter和PrintWriter 2. 使用ExceptionUtils 2.1. Maven依赖 2.2. 例子 学习将 Java 异常堆栈跟踪转换为String。当我们想要在日志文件中打印堆……




  • 1.使用StringWriter和PrintWriter
  • 2. 使用ExceptionUtils
    • 2.1. Maven依赖
    • 2.2. 例子

    学习将 Java 异常堆栈跟踪转换为String。当我们想要在日志文件中打印堆栈跟踪或将日志存储在数据库中以进行审计时,从StackTrace到 String 的转换可能很有用。

    请注意,Java 没有内置的直接 API 来获取String形式的堆栈跟踪。

    1.使用StringWriter和PrintWriter

    默认情况下,Throwable.printStackTrace()将异常回溯打印到标准错误流,即字段System.err的值。默认情况下,System.err打印到控制台。

    我们可以使用重载方法printStackTrace(writer)将回溯打印到指定的 print Writer(例如PrintWriter ) 。此PrintWriter 的目标是StringWriter。

    要使用StringWriter转换堆栈跟踪,请按照下列步骤操作

    • 将可抛出的堆栈跟踪及其回溯打印到PrintWriter。
    • 将打印编写器内容复制到StringWriter。
    • 使用StringWriter.toString()以字符串形式获取堆栈跟踪。

    我们使用try-with-resource来创建StringWriter实例PrintWriter,在处理完成时自动关闭两个编写器。

    在下面的程序中,我们创建一个NullPointerException并在将其转换为String后打印其堆栈跟踪。

    NullPointerException npe = new NullPointerException(\"Custom error\");
    String errorStr = null;
    
    try (StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw)) {
    
      npe.printStackTrace(pw);
      errorStr = sw.toString();
    
    } catch (IOException e) {
      throw new RuntimeException(\"Error while converting the stacktrace\");
    }
    
    System.out.println(errorStr);
    

    程序输出:

    java.lang.NullPointerException: Custom error
        at com.howtodoinjava.demo.StackTrace.main(StackTrace.java:11)
    

    2. 使用ExceptionUtils

    Apache common langs3库有一个优秀的实用程序类ExceptionUtils。它的getStackTrace()方法返回任何 Java 异常的字符串表示形式。

    2.1. Maven依赖

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
    

    2.2. 例子

    以下 Java 程序将堆栈跟踪复制到字符串中。

    String errorStr = ExceptionUtils.getStackTrace(new NullPointerException(\"Custom error\"));
    System.out.println(errorStr);
    

    程序输出:

    java.lang.NullPointerException: Custom error
        at com.howtodoinjava.demo.StringExample.main(StringExample.java:11)
    

     

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9203.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号