105 votes

Imprimer la trace de pile d'une exception

Comment imprimer la trace de pile d'une exception dans un flux autre que stderr? J'ai trouvé une façon d'utiliser getStackTrace () et d'imprimer la liste entière dans le flux.

91voto

Mike Deck Points 7443

Il existe une autre forme de Throwable.printStackTrace () qui prend un flux d'impression comme 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);
}
 

Cela imprimera la trace de la pile sur std out au lieu d'une erreur std.

89voto

Maurício Linhares Points 19468

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();
 

69voto

Bozho Points 273663

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

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

Cela dit, envisagez d'utiliser un enregistreur comme log4j.

3voto

templatetypedef Points 129554

La classe Throwable fournit deux méthodes nommées printStackTrace , une qui accepte un PrintWriter et une qui prend un PrintStream , qui génère la trace de pile dans le flux donné. Pensez à en utiliser un.

1voto

emory Points 6319

Voir javadoc

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X