Подтвердить что ты не робот

Печать трассировки стека исключения

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

String stackTrace = writer.toString();

Ответ 4

Для минималистов android dev: Log.getStackTraceString(exception)

Ответ 5

Я создал метод, который помогает с получением 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();
}

Ответ 6

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

Ответ 7

См. javadoc

out = some stream ...
try
{
}
catch ( Exception cause )
{
      cause . printStrackTrace ( new PrintStream ( out ) ) ;
}