如何在捕获的异常上显示堆栈跟踪?

问题描述 投票:25回答:7

我有一个通用函数,可以打印异常(使用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)

java tomcat stack-trace
7个回答

69
投票

您的日志记录框架应该具有记录异常的能力,因此只需将异常传递给适当的.error(Object, Throwable)调用就足够了:


14
投票

您尝试过吗?


5
投票

[Throwable.getStackTrace返回一个由Throwable.getStackTrace s组成的数组,因此StackTraceElement方法将返回该数组本身的文本表示形式。


4
投票

您也可以查看Google的Guava库。


1
投票

对于您的问题的确切答案是,您应该像这样调用Lo​​g4J:


1
投票

[private void _showErrorMessage(Exception e) { log.error(e.getClass() + ": " + e.getMessage() + ": " + e.getCause(), e); } 显示了用于此目的的两种方法,一种基于Apache Commons,另一种使用标准JDK方法。

© www.soinside.com 2019 - 2024. All rights reserved.