将堆栈跟踪转换为Java中的字符串
最后修改:2021年1月6日
1.介绍
在处理Java中的异常时,我们经常记录或只是显示堆栈痕迹。但是,有时,我们不想打印堆栈跟踪,我们可能需要将堆栈跟踪写入文件,到数据库,甚至通过网络传输它。
出于这些目的,使堆栈跟踪为a细绳会非常有用。不幸的是,Java没有提供直接做的非常方便的方法。
2.与核心Java转换
让我们从核心库开始。
功能printstacktrace()的例外类可以拿一个参数,无论是一个参数打印流或者Printwriter.。因此,可以使用aStringWriter.,将堆栈跟踪打印到a中细绳:
StringWriter SW = new StringWriter();printwriter pw =新的printwriter(sw);E.printStacktrace(PW);
然后,打电话sw.tostring()将返回堆栈跟踪作为一个细绳。
3.与Commons-Lang转换
虽然以前的方法是将堆栈跟踪转换为的最简单方法细绳使用核心Java,它仍然有点繁琐。幸运的是,Apache Commons-Lang提供完成作业的功能。
Apache Commons-lang是一个非常有用的库,提供了Java API的核心类中缺少的很多功能,包括可用于处理异常的类。
首先,让我们从项目配置开始。使用Maven时,我们只需要添加以下依赖pom.xml.:
<依赖> org.apache.commons groupID> Commons-Lang3 ARTIFACTID> 3.11 version> 依赖项>
然后,在我们的案例中,最有趣的类是异常,它提供了操纵例外的函数。使用此类,将堆栈跟踪作为一个细绳从A.例外非常简单:
String StackTrace = ExpectionUtils.getStacktrace(E);
4。结论
获取异常的堆栈跟踪作为一个例外细绳并不困难,但它远非直观。本文介绍了两种方式,可以使用核心Java或使用Apache Commons-lang。
请记住,Java 9将带来一个新的stackwalking api.这应该更容易。
一如既往,可以找到代码样本在github上。