Печать трассировки стека исключения
как напечатать трассировку стека исключения для потока, отличного от stderr? Один из способов, который я нашел, это использовать getStackTrace () и распечатать весь список в поток.
8 ответов:
Не красиво, но решение тем не менее:
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.
У меня есть метод, который помогает с получением 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