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.
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 .
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.
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();
Pour les Android dev minimalists: Log.getStackTraceString(exception)
_
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();
}
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
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.
Voir javadoc
out = some stream ...
try
{
}
catch ( Exception cause )
{
cause . printStrackTrace ( new PrintStream ( out ) ) ;
}