在 Java 中记录异常时,我遇到过几次常见问题。似乎有各种不同的类型需要处理。例如,有些包装了其他异常,有些则根本没有消息——只有一个类型。
我见过的大多数代码都使用 getMessage()
或 toString()
记录异常。但这些方法并不总能捕获查明问题所需的所有信息 - 其他方法,如 getCause()
和 getStackTrace()
有时会提供额外信息。
例如,我现在在 Eclipse Inspect 窗口中查看的异常是 InvocationTargetException
。异常本身没有原因,没有消息,没有堆栈跟踪……但是 getCause() 的目标是 InvalidUseOfMatchersException
,并填充了这些详细信息。
所以我的问题是:给定 任何 类型的异常作为输入,请提供一个方法,该方法将输出格式良好的字符串,其中包含有关异常的 所有 相关信息(例如,可能递归调用 getCause()
除其他外? )在发布之前,我几乎要自己尝试一下,但真的不想重新发明轮子-肯定以前一定做过很多次这样的事情……?
原文由 Steve Chambers 发布,翻译遵循 CC BY-SA 4.0 许可协议
java.util.logging
包 是 Java SE 的标准包。它的Logger
包括一个接受Throwable
对象的重载日志方法。它将为您记录异常的堆栈跟踪及其原因。例如:
将记录:
顺便说一句,在内部,这完全符合@philipp-wendler 的建议。请参阅
SimpleFormatter.java
的源代码。这只是一个更高级别的接口。