2012-02-22 13 views
9

Necesito registrar un seguimiento de pila cuando capturo una excepción en mi aplicación Java. Sé que las excepciones se han construido en el método printStackTrace(), y que eso puede enviar el seguimiento de la pila a un PrintWriter/PrintStream diferente, pero sería útil si pudiera tomar el trazado de la pila como una cadena para poder manipularlo o mostrarlo en un JMessagePane o algo así. Actualmente, la única forma que tengo de hacerlo es:Java envía el seguimiento de pila a un flujo de salida diferente

String stackTrace = ""; 
stackTrace += e.getClass().getName() + ": " + e.getMessage() + "\n"; 

for (StackTraceElement elt : e.getStackTrace()) { 
    stackTrace += "\tat " + elt + "\n"; 
} 

¿Hay una forma más limpia de hacer esto?

+1

Es probable que valga la pena señalar que el método 'printStackTrace' hace mucho más que la alternativa sugerida en el cuerpo de la pregunta. Es decir, incluye stacktrace para la causa si uno está configurado y excluye cualquier 'StackTraceElement' de la causa que es común a la excepción original, de ahí la frase' ... más' –

+0

punto excelente. Esa es otra razón por la que quiero una forma más elegante de hacerlo. – ewok

Respuesta

20

No:

StringWriter writer = new StringWriter(); 
e.printStackTrace(new PrintWriter(writer)); 
String stackTrace = writer.toString(); 
Cuestiones relacionadas