Konvertering af et stakspor til en streng i Java

1. Introduktion

Når vi beskæftiger os med undtagelser i Java, logger vi ofte eller viser bare stakspor. Men nogle gange vil vi ikke bare udskrive stakksporingen, vi skal muligvis skrive stacksporingen til en fil, til en database eller endda overføre den over netværket.

Til disse formål har stacksporingen som en Snor ville være meget nyttigt. Desværre giver Java ikke en meget praktisk metode til at gøre det direkte.

2. Konvertering med Core Java

Lad os starte med kernebiblioteket.

Funktionen printStackTrace () af Undtagelse klasse kan tage en parameter, enten a PrintStream eller a PrintWriter. Det er således muligt ved hjælp af en StringWriter, for at udskrive staksporingen til en Snor:

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

Så ringer sw.toString () returnerer stakksporingen som en Snor.

3. Konvertering med Commons-Lang

Mens den foregående metode er den enkleste måde at konvertere en stakssporing til en Snor ved hjælp af core Java forbliver det lidt besværligt. Heldigvis leverer Apache Commons-Lang en funktion, der udfører jobbet.

Apache Commons-Lang er et meget nyttigt bibliotek, der tilbyder mange funktioner, der mangler i kerneklasserne i Java API, inklusive klasser, der kan bruges til at arbejde med undtagelserne.

Lad os først starte med projektkonfigurationen. Når du bruger Maven, skal vi bare tilføje følgende afhængighed af pom.xml:

 org.apache.commons commons-lang3 3.5 

Så i vores tilfælde er den mest interessante klasse ExceptionUtils, som giver funktioner til at manipulere undtagelserne. Ved hjælp af denne klasse får du staksporet som en Snor fra en Undtagelse er ret ligetil:

String stacktrace = ExceptionUtils.getStackTrace (e); 

4. Konklusion

At få stackspor af en undtagelse som en Snor er ikke svært, men det er langt fra at være intuitivt. Denne artikel præsenterer to måder at gøre det på, enten ved hjælp af core Java eller Apache Commons-Lang.

Husk, at Java 9 vil bringe en ny StackWalking API, som skal gøre tingene lettere.

Som altid kan kodeeksemplerne findes her på GitHub.