Konvertera en stackspårning till en sträng i Java

1. Introduktion

När vi hanterar undantag i Java loggar vi ofta eller visar bara stackspår. Ibland vill vi dock inte bara skriva ut stackspåret, vi kan behöva skriva stackspåret till en fil, till en databas eller till och med överföra det via nätverket.

För dessa ändamål skulle det vara mycket användbart att ha stackspårningen som en sträng . Och tyvärr ger Java inte en mycket bekväm metod för att göra det direkt.

2. Konvertering med Core Java

Låt oss börja med kärnbiblioteket.

Funktionen printStackTrace () i Exception- klassen kan ta en parameter, antingen en PrintStream eller en PrintWriter . Således är det möjligt att, med hjälp av en StringWriter , skriva ut stackspåret till en String :

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

När du ringer till sw.toString () returneras stapelspåret som en sträng .

3. Konvertering med Commons-Lang

Medan den tidigare metoden är det enklaste sättet att konvertera en stackspårning till en sträng med hjälp av Java-kärnan, är den fortfarande lite besvärlig. Lyckligtvis erbjuder Apache Commons-Lang en funktion som gör jobbet.

Apache Commons-Lang är ett mycket användbart bibliotek som erbjuder många funktioner som saknas i Java-API: s kärnklasser, inklusive klasser som kan användas för att arbeta med undantagen.

Låt oss först börja med projektkonfigurationen. När vi använder Maven måste vi bara lägga till följande beroende på pom.xml :

 org.apache.commons commons-lang3 3.5  

I vårt fall är den mest intressanta klassen ExceptionUtils , som tillhandahåller funktioner för att manipulera undantagen. Att använda denna klass är att få stackspårningen som en sträng från ett undantag ganska enkelt:

String stacktrace = ExceptionUtils.getStackTrace(e); 

4. Slutsats

Att få stackens spår av ett undantag som en sträng är inte svårt, men det är långt ifrån intuitivt. Den här artikeln presenterar två sätt att göra det, antingen med hjälp av Java-kärnan eller med Apache Commons-Lang.

Tänk på att Java 9 kommer med ett nytt API för StackWalking som skulle göra det enklare.

Som alltid kan kodproverna hittas här på GitHub.