Een stapeltracering converteren naar een tekenreeks in Java

1. Inleiding

Als we te maken hebben met uitzonderingen in Java, loggen we regelmatig of geven we gewoon stacktraces weer. Soms willen we echter niet alleen de stapeltracering afdrukken, maar het kan nodig zijn om de stapeltracering naar een bestand of een database te schrijven of deze zelfs over het netwerk te verzenden.

Voor deze doeleinden is het hebben van de stacktracering een Draad zou erg handig zijn. En helaas biedt Java geen erg handige methode om dat rechtstreeks te doen.

2. Conversie met Core Java

Laten we beginnen met de kernbibliotheek.

De functie printStackTrace () van de Uitzondering class kan één parameter hebben, ofwel een PrintStream of een PrintWriter. Het is dus mogelijk om een StringWriter, om het stapeltracé af te drukken in een Draad:

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

Dan bellen sw.toString () retourneert de stacktracering als een Draad.

3. Conversie met Commons-Lang

Terwijl de vorige methode de eenvoudigste manier is om een ‚Äč‚Äčstacktracering naar een Draad met behulp van core Java, blijft het een beetje omslachtig. Gelukkig biedt Apache Commons-Lang een functie om het werk te doen.

Apache Commons-Lang is een zeer nuttige bibliotheek die veel functies biedt die ontbreken in de kernklassen van de Java API, inclusief klassen die kunnen worden gebruikt om met de uitzonderingen te werken.

Laten we eerst beginnen met de projectconfiguratie. Bij het gebruik van Maven hoeven we alleen de volgende afhankelijkheid toe te voegen aan het pom.xml:

 org.apache.commons commons-lang3 3.5 

Dan is in ons geval de meest interessante les ExceptionUtils, die functies biedt om de uitzonderingen te manipuleren. Met behulp van deze klasse wordt de stacktracering opgehaald als een Draad van een Uitzondering is vrij eenvoudig:

String stacktrace = ExceptionUtils.getStackTrace (e); 

4. Conclusie

De stacktracering van een uitzondering ophalen als een Draad is niet moeilijk, maar het is verre van intuïtief. Dit artikel presenteert twee manieren om dit te doen, ofwel met behulp van core Java of met Apache Commons-Lang.

Houd er rekening mee dat Java 9 een nieuwe StackWalking API zal brengen die dingen gemakkelijker zou moeten maken.

Zoals altijd zijn de codevoorbeelden hier op GitHub te vinden.