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


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

8 62

8 ответов:

Throwable.printStackTrace(..) можно взять PrintWriter или

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

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

String stackTrace = writer.toString();

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

например.

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

это выведет трассировку стека в std out вместо ошибки std.

для Android Dev minimalists:Log.getStackTraceString(exception)

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

}

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

посмотреть документация

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

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

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

ExceptionUtils.getStackTrace(e)

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