Pretvaranje traga stoga u niz u Javi

1. Uvod

Kad se bavimo iznimkama u Javi, često bilježimo ili jednostavno prikazujemo tragove stogova. Međutim, ponekad ne želimo samo ispisati trag steka, možda ćemo trebati zapisati trag stoga u datoteku, u bazu podataka ili ga čak poslati putem mreže.

U ove svrhe, imajući trag stoga kao Niz bilo bi vrlo korisno. I nažalost, Java ne nudi vrlo prikladnu metodu za to izravno.

2. Konverzija s Core Java

Počnimo s osnovnom knjižnicom.

Funkcija printStackTrace () od Iznimka klasa može uzeti jedan parametar, bilo a PrintStream ili a PrintWriter. Dakle, moguće je pomoću a StringWriter, za ispis traga stoga u Niz:

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

Zatim, zvanje sw.toString () vratit će trag stoga kao a Niz.

3. Konverzija s Commons-Langom

Iako je prethodna metoda najjednostavniji način pretvaranja traga stoga u Niz koristeći jezgru Jave, ostaje pomalo glomazan. Srećom, Apache Commons-Lang nudi funkciju koja obavlja posao.

Apache Commons-Lang vrlo je korisna biblioteka koja nudi puno značajki koje nedostaju u osnovnim klasama Java API-ja, uključujući klase koje se mogu koristiti za rad s iznimkama.

Prvo, krenimo s konfiguracijom projekta. Kada koristimo Maven, moramo dodati sljedeću ovisnost na pom.xml:

 org.apache.commons commons-lang3 3.5 

Tada je u našem slučaju najzanimljiviji čas ExceptionUtils, koji pruža funkcije za manipulaciju iznimkama. Koristeći ovu klasu, dobivanje traga steka kao Niz iz an Iznimka je prilično jednostavno:

Niz stacktrace = ExceptionUtils.getStackTrace (e); 

4. Zaključak

Dobivanje traga stoga iznimke kao Niz nije teško, ali daleko je od toga da je intuitivno. Ovaj članak predstavlja dva načina za to, bilo pomoću jezgre Java ili Apache Commons-Lang.

Imajte na umu da će Java 9 donijeti novi API za StackWalking koji bi trebao olakšati stvari.

Kao i uvijek, uzorke koda možete pronaći ovdje na GitHubu.