Java отправляет трассировку стека в другой поток вывода - PullRequest
10 голосов
/ 23 февраля 2012

Мне нужно регистрировать трассировку стека, когда я ловлю исключение в моем приложении Java.Я знаю, что исключения имеют встроенный метод printStackTrace() и что он может отправлять трассировку стека другому PrintWriter / PrintStream, но было бы полезно, если бы я мог получить трассировку стека в виде строки, чтобы я мог манипулировать ею илиотобразить его в JMessagePane или что-то.В настоящее время единственный способ сделать это:

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

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

Есть ли более чистый способ сделать это?

Ответы [ 2 ]

22 голосов
/ 23 февраля 2012

Есть:

StringWriter writer = new StringWriter();
e.printStackTrace(new PrintWriter(writer));
String stackTrace = writer.toString();
4 голосов
/ 23 февраля 2012

используя commons-lang:

String stackTrace = ExceptionUtils.getStacktrace(e);

javadoc: ExceptionUtils.html#getStackTrace().

...