Conversione di una traccia dello stack in una stringa in Java

1. Introduzione

Quando si tratta di eccezioni in Java, registriamo spesso o semplicemente visualizziamo tracce di stack. Tuttavia, a volte, non vogliamo solo stampare la traccia dello stack, potremmo aver bisogno di scrivere la traccia dello stack su un file, su un database o persino trasmetterla sulla rete.

Per questi scopi, sarebbe molto utile avere la traccia dello stack come String . E sfortunatamente, Java non fornisce un metodo molto conveniente per farlo direttamente.

2. Conversione con Core Java

Cominciamo con la libreria principale.

La funzione printStackTrace () della classe Exception può accettare un parametro, PrintStream o PrintWriter . Pertanto, è possibile, utilizzando uno StringWriter , stampare la traccia dello stack in una String :

StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); 

Quindi, la chiamata di sw.toString () restituirà la traccia dello stack come una stringa .

3. Conversione con Commons-Lang

Sebbene il metodo precedente sia il modo più semplice per convertire un'analisi dello stack in una stringa utilizzando Java core, rimane un po 'macchinoso. Fortunatamente, Apache Commons-Lang fornisce una funzione che fa il lavoro.

Apache Commons-Lang è una libreria molto utile che offre molte funzionalità che mancano nelle classi principali dell'API Java, comprese le classi che possono essere utilizzate per lavorare con le eccezioni.

Per prima cosa, iniziamo con la configurazione del progetto. Quando si utilizza Maven, dobbiamo solo aggiungere la seguente dipendenza al pom.xml :

 org.apache.commons commons-lang3 3.5  

Quindi, nel nostro caso, la classe più interessante è ExceptionUtils , che fornisce funzioni per manipolare le eccezioni. Usando questa classe, ottenere la traccia dello stack come una stringa da un'eccezione è piuttosto semplice:

String stacktrace = ExceptionUtils.getStackTrace(e); 

4. Conclusione

Ottenere la traccia dello stack di un'eccezione come String non è difficile, ma è ben lungi dall'essere intuitivo. Questo articolo presenta due modi per farlo, utilizzando Java core o utilizzando Apache Commons-Lang.

Tieni presente che Java 9 porterà una nuova API StackWalking che dovrebbe semplificare le cose.

Come sempre, gli esempi di codice possono essere trovati qui su GitHub.