当我在Java应用程序中捕获异常时,我需要记录堆栈跟踪。我知道异常有一个内置的printStackTrace()
方法,并且可以将堆栈跟踪发送到不同的PrintWriter / PrintStream,但是如果我可以将堆栈跟踪作为String抓取以便我可以操作它将会很有用它或在JMessagePane或其他东西中显示它。目前,我必须这样做的唯一方法是:
String stackTrace = "";
stackTrace += e.getClass().getName() + ": " + e.getMessage() + "\n";
for (StackTraceElement elt : e.getStackTrace()) {
stackTrace += "\tat " + elt + "\n";
}
有更简洁的方法吗?
答案 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()
。