Menukar Stack Trace ke String di Java

1. Pengenalan

Ketika berurusan dengan pengecualian di Java, kami sering melakukan log atau hanya memaparkan jejak timbunan. Namun, kadang-kadang, kita tidak hanya ingin mencetak jejak tumpukan, kita mungkin perlu menulis jejak tumpukan ke file, ke pangkalan data atau bahkan mengirimkannya melalui jaringan.

Untuk tujuan ini, menjadikan jejak stack sebagai String akan sangat berguna. Dan sayangnya, Java tidak menyediakan kaedah yang sangat mudah untuk melakukannya secara langsung.

2. Penukaran dengan Java Core

Mari mulakan dengan perpustakaan teras.

Fungsi printStackTrace () daripada Pengecualian kelas boleh mengambil satu parameter, sama ada PrintStream atau PrintWriter . Oleh itu, adalah mungkin, dengan menggunakan StringWriter , untuk mencetak jejak timbunan ke dalam String :

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

Kemudian, memanggil sw.toString () akan mengembalikan jejak timbunan sebagai String .

3. Penukaran dengan Commons-Lang

Walaupun kaedah sebelumnya adalah cara termudah untuk menukar jejak tumpukan ke String menggunakan inti Java, ia tetap sedikit membebankan. Nasib baik, Apache Commons-Lang menyediakan fungsi menjalankan tugas.

Apache Commons-Lang adalah perpustakaan yang sangat berguna yang menawarkan banyak ciri yang tidak ada di kelas teras API Java, termasuk kelas yang dapat digunakan untuk bekerja dengan pengecualian.

Pertama, mari kita mulakan dengan konfigurasi projek. Semasa menggunakan Maven, kita hanya perlu menambahkan kebergantungan berikut ke pom.xml :

 org.apache.commons commons-lang3 3.5  

Kemudian, dalam kes kami, kelas yang paling menarik adalah ExceptionUtils , yang menyediakan fungsi untuk memanipulasi pengecualian. Menggunakan kelas ini, mendapatkan jejak timbunan sebagai Rentetan daripada Pengecualian cukup mudah:

String stacktrace = ExceptionUtils.getStackTrace(e); 

4. Kesimpulan

Mendapatkan jejak pengecualian sebagai String adalah bukan String , tetapi jauh dari intuitif. Artikel ini memaparkan dua cara untuk melakukannya, baik menggunakan inti Java atau menggunakan Apache Commons-Lang.

Perlu diingat bahawa Java 9 akan membawa StackWalking API baru yang semestinya menjadikan semuanya lebih mudah.

Seperti biasa, contoh kod boleh didapati di GitHub di sini.