autocaravana
¿Cómo imprimo el seguimiento de la pila de una excepción a una secuencia que no sea stderr? Una forma que encontré es usar getStackTrace() e imprimir la lista completa en la secuencia.
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();
-
Esto es lo que necesitaba (¡aunque me siento muy sucio usándolo!)
– henley
16/09/2013 a las 19:45
mike cubierta
Existe una forma alternativa de Throwable.printStackTrace() que toma un flujo de impresión como 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á el seguimiento de la pila a la salida estándar en lugar del error estándar.
-
@FranklinYu, el punto central de la pregunta es que no quiere imprimir en stderr, sino en otra secuencia arbitraria.
– Mike Deck
16 de febrero de 2016 a las 16:34
-
en vez de
System.out
puedes usare.printStackTrace(new PrintStream("path.txt"))
– Mauricio Gracia Gutiérrez
30 de junio a las 5:48
Bozho
Throwable.printStackTrace(..)
puede tomar un PrintWriter
o PrintStream
argumento:
} catch (Exception ex) {
ex.printStackTrace(new java.io.PrintStream(yourOutputStream));
}
Dicho esto, considere usar una interfaz de registrador como SLF4J con una implementación de registro como Volver a iniciar sesión o log4j.
-
¿Cómo imprimiríamos esto con log4j? log.error(ej.printStackTrace())?
–Geoff Langenderfer
17 de junio a las 0:06
patricioma
Para los minimalistas de desarrollo de Android: Log.getStackTraceString(exception)
Apache commons proporciona una utilidad para convertir el seguimiento de la pila de arrojable a cadena.
Uso:
ExceptionUtils.getStackTrace(e)
Para obtener la documentación completa, consulte
https://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html
-
Si bien esta respuesta parece muy correcta, no es una respuesta a la pregunta. OP preguntó cómo podía imprimir el seguimiento de la pila en otra secuencia.
– Buurman
20 de marzo de 2018 a las 16:10
-
Aunque esto podría no responder a la pregunta de OP, creo que esta es la mejor manera de tener una excepción como String, utilizando un formato muy bien establecido. ¡Gracias!
– Clint Eastwood
20 de febrero de 2019 a las 13:57
ffonz
He creado un método que ayuda a obtener 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();
}
-
Si bien esta respuesta parece muy correcta, no es una respuesta a la pregunta. OP preguntó cómo podía imprimir el seguimiento de la pila en otra secuencia.
– Buurman
20 de marzo de 2018 a las 16:10
-
Aunque esto podría no responder a la pregunta de OP, creo que esta es la mejor manera de tener una excepción como String, utilizando un formato muy bien establecido. ¡Gracias!
– Clint Eastwood
20 de febrero de 2019 a las 13:57
templatetypedef
los arrojable clase proporciona dos métodos llamados printStackTrace
uno que acepta un PrintWriter
y uno que toma en un PrintStream
, que genera el seguimiento de la pila en la secuencia dada. Considere usar uno de estos.
Si desea obtener un seguimiento de excepción como String, puede llamar
getStackTrace
método de Trowable (la excepción) que devolverá una matriz deStackTraceElement
objetos que puede combinar en una cadena (usando el método toString de ese objeto para obtener una línea de seguimiento).– jcubic
4 de diciembre de 2013 a las 7:34