Imprimir o rastreamento de pilha de uma exceção

Como faço para imprimir o rastreamento de pilha de uma exceção para um stream diferente de stderr? Uma maneira que encontrei é usar getStackTrace () e imprimir toda a lista para o stream.

Throwable.printStackTrace(..) pode receber um argumento PrintWriter ou PrintStream :

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

Dito isso, considere usar uma interface de logger como SLF4J com uma implementação de registro como LOGBack ou log4j .

Não é bonito, mas uma solução, no entanto:

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

Há uma forma alternativa de Throwable.printStackTrace () que usa um stream de impressão como um argumento. http://download.oracle.com/javase/6/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)

Por exemplo

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

Isso imprimirá o rastreamento de pilha para std out em vez de std error.

Para os minimalistes do Android Dev: Log.getStackTraceString(exception)

Eu tenho um método que ajuda a obter o 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(); 

}

A class Throwable fornece dois methods chamados printStackTrace , um que aceita um PrintWriter e um que recebe um PrintStream , que gera o rastreamento de pilha para o stream especificado. Considere usar um desses.

Veja javadoc

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

O commons do Apache fornece um utilitário para converter o rastreio de pilha de throwable para string.

Uso:

 ExceptionUtils.getStackTrace(e) 

Para obter a documentação completa, consulte https://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html