Распечатать трассировку стека исключения - PullRequest
72 голосов
/ 26 июля 2011

Как вывести трассировку стека исключения в поток, отличный от stderr? Один из найденных мной способов - использовать getStackTrace () и распечатать весь список в поток.

Ответы [ 8 ]

72 голосов
/ 26 июля 2011

Не красиво, но, тем не менее, решение:

StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter( writer );
exception.printStackTrace( printWriter );
printWriter.flush();

String stackTrace = writer.toString();
72 голосов
/ 26 июля 2011

Существует альтернативная форма Throwable.printStackTrace (), которая принимает поток печати в качестве аргумента.http://download.oracle.com/javase/6/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)

Например,

catch(Exception e) {
    e.printStackTrace(System.out);
}

Это выведет трассировку стека на стандартный вывод вместо ошибки стандартного отклонения.

56 голосов
/ 26 июля 2011

Throwable.printStackTrace(..) может принимать аргумент PrintWriter или PrintStream:

} catch (Exception ex) {
    ex.printStackTrace(new java.io.PrintStream(yourOutputStream));
}

Тем не менее рассмотрите возможность использования интерфейса регистратора, например SLF4J , с реализацией журналирования, например * 1009.* LOGBack или log4j .

8 голосов
/ 06 декабря 2015

Для минималистов разработчиков Android: Log.getStackTraceString(exception)

3 голосов
/ 15 марта 2016

Я создал метод, помогающий получить stackTrace:

private static String getStackTrace(Exception ex) {
    StringBuffer sb = new StringBuffer(500);
    StackTraceElement[] st = ex.getStackTrace();
    sb.append(ex.getClass().getName() + ": " + ex.getMessage() + "\n");
    for (int i = 0; i < st.length; i++) {
      sb.append("\t at " + st[i].toString() + "\n");
    }
    return sb.toString();
}
2 голосов
/ 26 июля 2011

Класс Throwable предоставляет два метода с именем printStackTrace, один из которых принимает PrintWriter, а другой - PrintStream, который выводит трассировку стека в данный поток.Попробуйте использовать один из них.

1 голос
/ 20 марта 2018

Apache commons предоставляет утилиту для преобразования трассировки стека из бросаемого в строку.

Использование:

ExceptionUtils.getStackTrace(e)

Для полной документации обратитесь к https://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html

1 голос
/ 26 июля 2011

См. Javadoc

out = some stream ...
try
{
}
catch ( Exception cause )
{
      cause . printStrackTrace ( new PrintStream ( out ) ) ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...