Katakanlah Anda menangkap pengecualian dan dapatkan yang berikut pada output standar (seperti, katakanlah, konsol) jika Anda melakukan e.printStackTrace () :
java.io.FileNotFoundException: so.txt
at java.io.FileInputStream.<init>(FileInputStream.java)
at ExTest.readMyFile(ExTest.java:19)
at ExTest.main(ExTest.java:7)
Sekarang saya ingin mengirim ini sebagai ganti ke logger seperti, katakanlah, log4j untuk mendapatkan yang berikut ini:
31947 [AWT-EventQueue-0] ERROR Java.io.FileNotFoundException: so.txt
32204 [AWT-EventQueue-0] ERROR at java.io.FileInputStream.<init>(FileInputStream.java)
32235 [AWT-EventQueue-0] ERROR at ExTest.readMyFile(ExTest.java:19)
32370 [AWT-EventQueue-0] ERROR at ExTest.main(ExTest.java:7)
Bagaimana saya bisa melakukan ini?
try {
...
} catch (Exception e) {
final String s;
... // <-- What goes here?
log.error( s );
}
java
logging
log4j
stack-trace
SintaksT3rr0r
sumber
sumber
log.error(e.getLocalizedMessage(), e)
yang benar-benar berlebihan. Apakah itu menangani nol untuk argumen pertama?log4j-1.2.8.jar
dan saya ingin mencetak semuastackTrace
pada file log saya jadi saya mencoba seperti yang Anda sebutkan di atas tetapi sedang mencetak pada file log saya sajanullPointerException
. Saya digunakan pada kode sayae.printStackTrace()
untuk mencetak semua jejak. Kenapa Kolavery ini?Jika Anda ingin mencatat stacktrace tanpa melibatkan pengecualian lakukan saja ini:
sumber
Anda juga bisa mendapatkan jejak stack sebagai string melalui
ExceptionUtils.getStackTrace
.Lihat: ExceptionUtils.java
Saya menggunakannya hanya untuk
log.debug
, agar tetaplog.error
sederhana.sumber
Hanya karena itu terjadi pada saya dan dapat bermanfaat. Jika kamu melakukan ini
Anda akan mendapatkan header pengecualian dan bukan seluruh stacktrace. Karena logger akan berpikir bahwa Anda melewatkan sebuah String. Lakukan tanpa
{}
seperti yang dikatakan skaffmansumber
Throwable.toString()
tidak mengembalikan stacktrace. (Dengan asumsi Anda menggunakan logger yang tahu apa yang harus dilakukan dengan '{}'.)Jawaban dari skaffman jelas merupakan jawaban yang benar. Semua metode logger seperti
error()
,warn()
,info()
,debug()
mengambil Throwable sebagai parameter kedua:Namun, Anda dapat mengekstrak stacktrace sebagai String juga. Terkadang ini bisa berguna jika Anda ingin memanfaatkan fitur pemformatan menggunakan placeholder "{}" - lihat metode
void info(String var1, Object... var2);
Dalam kasus ini katakan Anda memiliki stacktrace sebagai String, maka Anda sebenarnya dapat melakukan sesuatu seperti ini:Ini akan mencetak pesan parametrized dan stacktrace di akhir dengan cara yang sama seperti untuk metode:
logger.error("error: ", e);
Saya benar-benar menulis perpustakaan open source yang memiliki Utilitas untuk ekstraksi stacktrace sebagai String dengan opsi untuk secara cerdas menyaring beberapa kebisingan dari stacktrace. Yaitu jika Anda menentukan awalan paket yang Anda minati dengan stacktrace yang Anda ekstrak akan disaring dari beberapa bagian yang tidak relevan dan memberi Anda info yang sangat rumit. Berikut adalah tautan ke artikel yang menjelaskan utilitas apa yang dimiliki perpustakaan dan di mana mendapatkannya (baik sebagai artefak pakar dan sumber git) dan bagaimana menggunakannya juga. Pustaka Java Open Source dengan pemfilteran stack trace, Silent String parsing Unicode converter dan perbandingan versi Lihat paragraf " Stacktrace noise filter "
sumber
Jawaban ini mungkin tidak terkait dengan pertanyaan yang diajukan tetapi terkait dengan judul pertanyaan.
ATAU
ATAU
sumber
Di Log4j 2, Anda bisa menggunakan Logger.catching () untuk mencatat stacktrace dari pengecualian yang tertangkap.
sumber
ini akan menjadi log4j error / pengecualian logging - dapat dibaca oleh splunk / logging / monitoring s / w lainnya. semuanya adalah bentuk pasangan kunci-nilai. log4j akan mendapatkan jejak stack dari Exception obj
e
sumber
sumber
Anda dapat menggunakan kode di bawah ini:
Di sini Anda bisa menelepon:
LogWriterUtility.errorWithAnalysis( YOUR_EXCEPTION_INSTANCE);
Ini akan mencetak stackTrace ke log Anda.
sumber
Buat ini
class
:Sebut ini dalam kode Anda
sumber