Java将堆栈跟踪发送到不同的输出流

时间:2012-02-22 22:25:50

标签: java exception stack-trace

当我在Java应用程序中捕获异常时,我需要记录堆栈跟踪。我知道异常有一个内置的printStackTrace()方法,并且可以将堆栈跟踪发送到不同的PrintWriter / PrintStream,但是如果我可以将堆栈跟踪作为String抓取以便我可以操作它将会很有用它或在JMessagePane或其他东西中显示它。目前,我必须这样做的唯一方法是:

String stackTrace = "";
stackTrace += e.getClass().getName() + ": " + e.getMessage() + "\n";

for (StackTraceElement elt : e.getStackTrace()) {
    stackTrace += "\tat " + elt + "\n";
}

有更简洁的方法吗?

2 个答案:

答案 0 :(得分:21)

有:

StringWriter writer = new StringWriter();
e.printStackTrace(new PrintWriter(writer));
String stackTrace = writer.toString();

答案 1 :(得分:4)

使用commons-lang:

String stackTrace = ExceptionUtils.getStacktrace(e);

javadoc:ExceptionUtils.html#getStackTrace()