Как распечатать трассировку стека исключения в поток, отличный от stderr? Один из способов, который я нашел, - использовать getStackTrace() и распечатать весь список в потоке.
Печать трассировки стека исключения
Ответ 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();
Ответ 3
Существует альтернативная форма 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);
}
Это приведет к выводу трассировки стека в std вместо std-ошибки.
Ответ 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 ) ) ;
}
Ответ 8
Apache commons предоставляет утилиту для преобразования трассировки стека из бросаемого в строку.
Использование:
ExceptionUtils.getStackTrace(e)
Для полной документации см. Https://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html.