Konvertieren eines Stack-Trace in einen String in Java

Konvertieren eines Stack-Trace in einen String in Java

1. Einführung

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 müssen 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, die Stapelverfolgung alsString 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 FunktionprintStackTrace() der KlasseException kann einen Parameter annehmen, entweder aPrintStream oderPrintWriter. Somit ist es möglich, unter Verwendung vonStringWriter die Stapelverfolgung inString zu drucken:

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

Wenn Sie dannsw.toString() aufrufen, wird die Stapelverfolgung alsString zurückgegeben.

3. Konvertierung mit Commons-Lang

Die vorherige Methode ist zwar die einfachste Methode zum Konvertieren eines Stack-Trace inString mit Java-Kern, bleibt jedoch etwas umständlich. Glücklicherweise bietetApache 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, mit denen die Ausnahmen bearbeitet werden können.

Beginnen wir zunächst mit der Projektkonfiguration. Bei Verwendung von Maven müssen wir nur die folgenden Abhängigkeiten zupom.xml hinzufügen:


    org.apache.commons
    commons-lang3
    3.5

In unserem Fall istExceptionUtils die interessanteste Klasse, die Funktionen zum Bearbeiten der Ausnahmen bereitstellt. Mit dieser Klasse ist es ziemlich einfach, den Stack-Trace alsString vonException abzurufen:

String stacktrace = ExceptionUtils.getStackTrace(e);

4. Fazit

Es ist nicht schwierig, die Stapelverfolgung einer Ausnahme alsString zu ermitteln, aber es ist alles andere als intuitiv. In diesem Artikel werden zwei Möglichkeiten vorgestellt, entweder mit Core Java oder mit Apache Commons-Lang.

Denken Sie daran, dass Java 9 ein neuesStackWalking API bringt, was die Sache einfacher machen sollte.

Wie immer finden sich die Codebeispiele inhere on GitHub.