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

2022-09-01 11:07:30

我有一个打印异常的通用函数(使用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) <- 显示错误,但不显示堆栈跟踪


答案 1

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

如果您的日志记录框架无法做到这一点,或者由于任何其他原因需要堆栈跟踪,那么它就会变得有点困难。您必须创建一个包装 a 并调用 :StringPrintWriterStringWriter.printStackTrace()Exception

StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();

答案 2

你试过吗?

private void _showErrorMessage(Exception e) {
    log.error("Hey! got an exception", e);
}

推荐