Konvertere en stakksporing til en streng i Java

1. Introduksjon

Når vi arbeider med unntak i Java, logger vi ofte eller viser bare stakkspor. Noen ganger vil vi imidlertid ikke bare skrive ut stack-trace, vi kan trenge å skrive stack-trace til en fil, til en database eller til og med overføre den over nettverket.

For disse formål, å ha stablespor som en String ville være veldig nyttig. Dessverre gir Java ikke en veldig praktisk metode for å gjøre det direkte.

2. Konvertering med Core Java

La oss starte med kjernebiblioteket.

Funksjonen printStackTrace () av Unntak klasse kan ta en parameter, enten a PrintStream eller a PrintWriter. Dermed er det mulig å bruke en StringWriter, for å skrive ut bunnspor i a String:

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

Så ringer sw.toString () vil returnere stakksporingen som en String.

3. Konvertering med Commons-Lang

Mens den forrige metoden er den enkleste måten å konvertere en stack-spor til a String bruker kjernen Java, er det fortsatt litt tungvint. Heldigvis tilbyr Apache Commons-Lang en funksjon som gjør jobben.

Apache Commons-Lang er et veldig nyttig bibliotek som tilbyr mange funksjoner som mangler i kjerneklassene i Java API, inkludert klasser som kan brukes til å arbeide med unntakene.

Først, la oss starte med prosjektkonfigurasjonen. Når du bruker Maven, må vi bare legge til følgende avhengighet til pom.xml:

 org.apache.commons commons-lang3 3.5 

Så, i vårt tilfelle, er den mest interessante klassen UnntakUtils, som gir funksjoner for å manipulere unntakene. Ved å bruke denne klassen får du stabelsporet som en String fra en Unntak er ganske grei:

String stacktrace = ExceptionUtils.getStackTrace (e); 

4. Konklusjon

Å få stabelspor av et unntak som en String er ikke vanskelig, men det er langt fra å være intuitivt. Denne artikkelen presenterer to måter å gjøre det på, enten ved hjelp av Java-kjerne eller Apache Commons-Lang.

Husk at Java 9 vil bringe et nytt StackWalking API som skal gjøre ting enklere.

Som alltid kan kodeeksemplene finnes her på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found