Prevod trasovania zásobníka na reťazec v Jave

1. Úvod

Keď sa zaoberáme výnimkami v prostredí Java, často zaznamenávame alebo jednoducho zobrazujeme stopy zásobníka. Niekedy však nechceme iba vytlačiť stopu zásobníka, možno budeme musieť stopu zásobníka zapísať do súboru, do databázy alebo dokonca preniesť cez sieť.

Pre tieto účely je sledovanie stopy ako a String by bolo veľmi užitočné. A bohužiaľ, Java neposkytuje veľmi pohodlný spôsob, ako to urobiť priamo.

2. Konverzia pomocou Core Java

Začnime s hlavnou knižnicou.

Funkcia printStackTrace () z Výnimka trieda môže mať jeden parameter, buď a PrintStream alebo a PrintWriter. Je teda možné pomocou a StringWriter, vytlačiť stopu stohu do a String:

StringWriter sw = nový StringWriter (); PrintWriter pw = nový PrintWriter (sw); e.printStackTrace (pw); 

Potom, volanie sw.toString () vráti stopu zásobníka ako a String.

3. Konverzia pomocou Commons-Lang

Zatiaľ čo predchádzajúca metóda je najjednoduchší spôsob prevodu sledovania zásobníka na a String pomocou jadra Java zostáva trochu ťažkopádnym. Našťastie Apache Commons-Lang poskytuje funkciu vykonávajúcu prácu.

Apache Commons-Lang je veľmi užitočná knižnica, ktorá ponúka veľa funkcií, ktoré chýbajú v základných triedach rozhrania Java API, vrátane tried, ktoré možno použiť na prácu s výnimkami.

Najskôr začnime s konfiguráciou projektu. Keď používame Maven, stačí pridať nasledujúcu závislosť do pom.xml:

 org.apache.commons commons-lang3 3.5 

Potom je v našom prípade najzaujímavejšia trieda Výnimka, ktorá poskytuje funkcie na manipuláciu s výnimkami. Pomocou tejto triedy získa trasovanie zásobníka ako a String z an Výnimka je dosť priamy:

Reťazec stacktrace = ExceptionUtils.getStackTrace (e); 

4. Záver

Získanie sledovania zásobníka výnimky ako String nie je ťažké, ale ani zďaleka nie je intuitívne. Tento článok predstavuje dva spôsoby, ako to urobiť, a to buď pomocou základnej Javy, alebo pomocou Apache Commons-Lang.

Nezabudnite, že Java 9 prinesie nové rozhranie StackWalking API, ktoré by malo veci uľahčiť.

Ako vždy, ukážky kódu nájdete tu na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found