Mengonversi Stack Trace ke String di Java

1. Perkenalan

Saat menangani pengecualian di Java, kami sering melakukan logging atau hanya menampilkan pelacakan tumpukan. Namun, terkadang, kami tidak ingin hanya mencetak pelacakan tumpukan, kami mungkin perlu menulis pelacakan tumpukan ke file, ke database, atau bahkan mengirimkannya melalui jaringan.

Untuk tujuan ini, memiliki pelacakan tumpukan sebagai String akan sangat berguna. Dan sayangnya, Java tidak menyediakan metode yang sangat mudah untuk melakukannya secara langsung.

2. Konversi dengan Core Java

Mari kita mulai dengan pustaka inti.

Fungsi printStackTrace () dari kelas Exception bisa mengambil satu parameter, baik PrintStream atau PrintWriter . Jadi, dimungkinkan, menggunakan StringWriter , untuk mencetak jejak tumpukan ke dalam String :

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

Kemudian, memanggil sw.toString () akan mengembalikan pelacakan tumpukan sebagai String .

3. Konversi dengan Commons-Lang

Meskipun metode sebelumnya adalah cara paling sederhana untuk mengonversi pelacakan tumpukan ke String menggunakan Java inti, metode ini tetap sedikit rumit. Untungnya, Apache Commons-Lang menyediakan fungsi untuk melakukan pekerjaan itu.

Apache Commons-Lang adalah pustaka yang sangat berguna yang menawarkan banyak fitur yang hilang di kelas inti Java API, termasuk kelas yang dapat digunakan untuk bekerja dengan pengecualian.

Pertama, mari kita mulai dengan konfigurasi proyek. Saat menggunakan Maven, kita hanya perlu menambahkan dependensi berikut ke pom.xml :

 org.apache.commons commons-lang3 3.5  

Kemudian, dalam kasus kami, kelas yang paling menarik adalah ExceptionUtils , yang menyediakan fungsi untuk memanipulasi pengecualian. Menggunakan kelas ini, mendapatkan pelacakan tumpukan sebagai String dari Exception cukup mudah:

String stacktrace = ExceptionUtils.getStackTrace(e); 

4. Kesimpulan

Mendapatkan jejak tumpukan pengecualian sebagai String tidaklah sulit, tetapi itu jauh dari intuitif. Artikel ini menyajikan dua cara untuk melakukannya, baik menggunakan Java inti atau menggunakan Apache Commons-Lang.

Perlu diingat bahwa Java 9 akan menghadirkan StackWalking API baru yang akan mempermudah segalanya.

Seperti biasa, contoh kode dapat ditemukan di sini di GitHub.