プロジェクトへのログインに slf4j を使用しています。また、ユーザー ID パラメーターのログ記録に MDC を使用したいと考えています。だから私はチュートリアルとドキュメントをチェックし、次のようなコードを作成します:
MDC.put("key", userId)
userId は実際には文字列です。
そして、私は通常の log4j xml をアペンダーなどのプロパティで使用します。そこに %X{key} を追加しますが、何も起こりません。%X{key} の代わりに何も表示されませんが、%-5p や %c などの他のパラメーターはうまく機能します。
だから私はデバッグを使用してMDC.put()メソッドで何が起こるかを見て、MDCの初期化で使用されていることを見つけました:
MDCAdapter mdcAdapter;
mdcAdapter = StaticMDCBinder.SINGLETON.getMDCA();
IDEA でデバッグすると、MDCAdapter の実装の 1 つのような "Log4jMDCAdapter" があることがわかります。しかし、次に StaticMDCBinder を確認すると、次のようなコードがあります。
public MDCAdapter getMDCA() {
return new NOPMDCAdapter();
}
では、slf4j が log4j などの適切なアダプターを使用して MDC を初期化できる可能性はありますか ??? わかりませんでした。常に NOPMDCAdapter を使用するため、MDC に何も保存できず、ログに表示できません。どうすれば修正できますか??
クラスパスには次のものがあります:
- log4j-1.2.16.jar
- slf4j-api-1.6.1.jar
- slf4j-api-1.6.2.jar
- slf4j-jcl-1.6.2.jar
- slf4j-log4j12-1.6.2.jar