Konvertieren eines Stack-Trace in einen String in Java

1. Einleitung

Beim Umgang mit Ausnahmen in Java werden häufig Stapelspuren protokolliert oder einfach angezeigt. Manchmal möchten wir jedoch nicht nur den Stack-Trace drucken, sondern den Stack-Trace möglicherweise in eine Datei, in eine Datenbank schreiben oder sogar über das Netzwerk übertragen.

Für diese Zwecke wäre es sehr nützlich , den Stack-Trace als String zu haben. Und leider bietet Java keine sehr bequeme Methode, um dies direkt zu tun.

2. Konvertierung mit Core Java

Beginnen wir mit der Kernbibliothek.

Die Funktion printStackTrace () der Exception- Klasse kann einen Parameter annehmen , entweder einen PrintStream oder einen PrintWriter . Somit ist es möglich, mit einem StringWriter den Stack-Trace in einen String zu drucken :

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

Wenn Sie dann sw.toString () aufrufen, wird der Stack-Trace als String zurückgegeben .

3. Konvertierung mit Commons-Lang

Die vorherige Methode ist zwar die einfachste Methode zum Konvertieren eines Stack-Trace in einen String mit Java-Kern, bleibt jedoch etwas umständlich. Glücklicherweise bietet Apache Commons-Lang eine Funktion, die die Arbeit erledigt.

Apache Commons-Lang ist eine sehr nützliche Bibliothek, die viele Funktionen bietet, die in den Kernklassen der Java-API fehlen, einschließlich Klassen, die zum Arbeiten mit den Ausnahmen verwendet werden können.

Beginnen wir zunächst mit der Projektkonfiguration. Bei Verwendung von Maven müssen wir der pom.xml lediglich die folgende Abhängigkeit hinzufügen :

 org.apache.commons commons-lang3 3.5  

In unserem Fall ist ExceptionUtils die interessanteste Klasse , die Funktionen zum Bearbeiten der Ausnahmen bereitstellt. Mit dieser Klasse ist es ziemlich einfach , den Stack-Trace als String aus einer Ausnahme abzurufen:

String stacktrace = ExceptionUtils.getStackTrace(e); 

4. Fazit

Es ist nicht schwierig, den Stack-Trace einer Ausnahme als String abzurufen, aber es ist alles andere als intuitiv. In diesem Artikel werden zwei Möglichkeiten vorgestellt, entweder mit Kern-Java oder mit Apache Commons-Lang.

Beachten Sie, dass Java 9 eine neue StackWalking-API enthält, die die Arbeit erleichtern soll.

Die Codebeispiele finden Sie wie immer hier auf GitHub.