我需要捕获一个异常,并获取一个使用printStackTrace()打印的字符串。

看起来最简单的事情是调用printStackTrace(X),其中X将PrintStreamPrintWriter子类化,并将其收集到StringBuilder并可以返回String

这样的事情存在吗?如果没有,有什么建议怎么做?

编辑:skaffman发布了使用getStackTrace()的解决方案。 (您或主持人可以删除吗?)这实际上是唯一可行的“正确”解决方案。在StringWriter之上使用PrintWriter的问题尽管很容易实现,但问题在于对于深层堆栈跟踪,它不会打印所有元素。

最佳答案

怎么样,而不是printStackTrace,您调用Throwable.getStackTrace(),它返回StackTraceElement[]?您仍然需要做一些工作才能将其放入String中,但这可以说是比利用字符串缓冲区之类的方法更干净的解决方案。

一旦有了StackTraceElement[],就可以进行操作。 printStackTrace指示的布局可能并不真正适合您要使用的布局,并且StackTraceElement对象模型提供的更明确的格式可以为您提供更多控制。毕竟这就是它所提供的。

09-25 22:07