Imprime el rastro de la stack de una excepción

¿Cómo imprimo el rastro de la stack de una excepción a una stream que no sea stderr? Una manera que encontré es usar getStackTrace () e imprimir toda la lista en la transmisión.

Throwable.printStackTrace(..) puede tomar un argumento PrintWriter o PrintStream :

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

Dicho esto, considere usar una interfaz de registrador como SLF4J con una implementación de registro como LOGBack o log4j .

No es hermoso, pero una solución no obstante:

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

Hay una forma alternativa de Throwable.printStackTrace () que toma una secuencia de impresión como un argumento. http://download.oracle.com/javase/6/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)

P.ej

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

Esto imprimirá la traza de la stack a la salida estándar en lugar del error estándar.

Para los desarrolladores minimalistas de Android: Log.getStackTraceString(exception)

Tengo un método que ayuda a obtener el 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(); 

}

La clase printStackTrace proporciona dos métodos denominados printStackTrace , uno que acepta un PrintWriter y otro que toma un PrintStream , que emite el seguimiento de stack a la secuencia dada. Considera usar uno de estos.

Ver javadoc

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

Apache commons proporciona utilidad para convertir el seguimiento de la stack de throwable a string.

Uso:

 ExceptionUtils.getStackTrace(e) 

Para obtener la documentación completa, consulte https://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html