SLF4Jを使用してプレースホルダーを使用して例外とメッセージをログに記録する方法


85

SLF4Jを使用してエラーメッセージと例外の両方をログに記録する正しいアプローチは何ですか?

これを試してみましたが、例外スタックトレースが出力されません。

logger.error("Unable to parse data {}", inputMessage, e);

この場合、例外スタックトレースをログアウトするだけでなく{}、データを入力する必要inputMessageがあります。

これを行うために私が見ることができる唯一の方法は、これを行うことです:

logger.error("Unable to parse data " + inputMessage, e);

これはきれいではありません。


最初のlogger.error行は、slf4jバージョン1.7.25で希望どおりに機能します。
kiml42 2018

回答:


131

SLF4Jバージョン1.6以降、SLF4Jは、最後のパラメーターを意図したとおりに、つまり例外として解釈します。古いバージョンのSLF4JAPIを使用している必要があります。


7
これはJavadocに記述されていますか?私はここで同様の情報を見つけることを期待していました: slf4j.org/apidocs/org/slf4j/Logger.html
Scot

2
私はあなたを信じていますが、@ Scotのように、この動作が文書化されることを望んでいました。
ステファン

4
スコット、@ステファン-前述の動作は、こちらのFAQに記載されているようです。
Priidu Neemre 2015

8
これは最高の秘密のようなものです。ご指摘いただきありがとうございます。私のフォローアップの質問は、なぜこれがvar-argで可能であるという事実を隠すのでしょうか?を取り、Throwableその後にvar-argを持つ新しいオーバーロードされたメソッドを作成できないのはなぜですか?消去の問題はありますか?これは、最後の引数として例外が渡される他のライブラリの標準ですか?
gaoagong 2016

7
これは(?以来)FAQに文書化されています:slf4j.org/faq.html#paramException。この機能をより明確に文書化する必要があることに同意します。
Stephan202 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.