我有一个打印异常的通用函数(使用log4j):
private void _showErrorMessage(Exception e) {
log.error(e.getClass() + ": " + e.getMessage() + ": " + e.getCause() + "\n" + e.getStackTrace().toString());
}
我看到的不是堆栈跟踪:
[Ljava.lang.StackTraceElement;@49af7e68
如何正确查看异常的堆栈跟踪?
更新
log. error(e)〈-显示错误,但不显示堆栈跟踪
7条答案
按热度按时间46scxncf1#
您的日志框架应该能够记录异常,因此只需将异常传递给适当的
.error(Object, Throwable)
调用就足够了:java.util.logging
可以做到如果你的日志框架不能做到这一点,或者你需要在
String
中进行堆栈跟踪,那么这就有点困难了,你必须创建一个PrintWriter
来 PackageStringWriter
,并在Exception
上调用.printStackTrace()
:a1o7rhls2#
你试过吗?
s1ag04yj3#
我使用Jakarta Commons Lang的ExceptionUtils#getFullStackTrace方法
dy1byipe4#
Throwable.getStackTrace
返回StackTraceElement
的数组,因此toString
方法返回数组本身的文本表示。为了实际检索堆栈跟踪信息,必须遍历每个
StackTraceElement
以获得更多信息。k2fxgqgv5#
你也可以从谷歌上查看Guava库。
Throwables.getStackTraceAsString(Throwable throwable)
enxuqcxy6#
您的问题的确切答案是,您应该这样调用Log4J:
尽管我会省去对e.getCause()的调用,因为stacktrace无论如何都会给予你这个值,所以:
如果您确实需要stacktrace的字符串,ExceptionUtils是不错的,但是由于您使用的是Log4J,如果不利用它内置的异常处理,您会损失很多。
hsvhsicv7#
Exception Stacktrace logging显示了两种用于此目的的方法,一种基于Apache Commons,另一种使用标准JDK方法。