web-dev-qa-db-fra.com

Imprimer la trace de la pile d'une exception

Comment imprimer la trace de pile d'une exception dans un flux autre que stderr? L'une des méthodes que j'ai trouvées consiste à utiliser getStackTrace () et à imprimer la liste complète dans le flux.

73
r.v

Throwable.printStackTrace(..) peut prendre un argument PrintWriter ou PrintStream:

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

Cela dit, envisagez d'utiliser une interface de journalisation telle que SLF4J avec une implémentation de journalisation telle que LOGBack ou log4j .

56
Bozho

Il existe une autre forme de Throwable.printStackTrace () qui prend un flux d'impression en tant qu'argument. http://download.Oracle.com/javase/6/docs/api/Java/lang/Throwable.html#printStackTrace (Java.io.PrintStream)

Par exemple.

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

Ceci imprimera la trace de la pile sur std out au lieu de std error.

75
Mike Deck

Pas beau, mais une solution quand même:

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

String stackTrace = writer.toString();
72
Maurício Linhares

Pour les Android dev minimalists: Log.getStackTraceString(exception) _

8
PatrickMA

J'ai créé une méthode qui aide à obtenir le 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();
}
3
kuppurangi

Apache commons fournit un utilitaire permettant de convertir la trace de pile de throwable en string.

Usage:

ExceptionUtils.getStackTrace(e)

Pour une documentation complète, voir https://commons.Apache.org/proper/commons-lang/javadocs/api-release/index.html

3
Rathan

La classe Throwable fournit deux méthodes nommées printStackTrace, une qui accepte un PrintWriter et une qui prend un PrintStream, qui renvoie le tracé de la pile dans le flux donné. Pensez à utiliser l'un d'entre eux.

2
templatetypedef

Voir javadoc

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