我需要捕获一个异常,并获取一个使用printStackTrace()
打印的字符串。
看起来最简单的事情是调用printStackTrace(X)
,其中X将PrintStream
或PrintWriter
子类化,并将其收集到StringBuilder
并可以返回String
。
这样的事情存在吗?如果没有,有什么建议怎么做?
编辑:skaffman发布了使用getStackTrace()
的解决方案。 (您或主持人可以删除吗?)这实际上是唯一可行的“正确”解决方案。在StringWriter之上使用PrintWriter的问题尽管很容易实现,但问题在于对于深层堆栈跟踪,它不会打印所有元素。
最佳答案
怎么样,而不是printStackTrace
,您调用Throwable.getStackTrace()
,它返回StackTraceElement[]
?您仍然需要做一些工作才能将其放入String中,但这可以说是比利用字符串缓冲区之类的方法更干净的解决方案。
一旦有了StackTraceElement[]
,就可以进行操作。 printStackTrace
指示的布局可能并不真正适合您要使用的布局,并且StackTraceElement
对象模型提供的更明确的格式可以为您提供更多控制。毕竟这就是它所提供的。