9

Slf4j と java.util.Logging を使用してロギング メカニズムをセットアップしました。いくつかのスレッドがあるため、ログが混在しているため、ログから明確なアイデアを得ることができません。ここで、MDCの概念を使用して、ログ ファイルにさらにデータを追加して、それらが明確になるようにします。

問題はSlf4jと同じですが、MDC java.util.Logging をサポートしていません。しかし、それは言う

基礎となるフレームワークが java.util.logging などの MDC を提供しない場合、SLF4J は引き続き MDC データを保存しますが、その中の情報はカスタム ユーザー コードで取得する必要があります。

このカスタム コードを実行する方法を見つけようとしています。グーグルはあまり役に立ちません。Slf4j には「BasicMDCAdapter」という名前のヘルパー クラスがあります。しかし、私はそれを使用する方法がわかりません。サンプルコードがどこにも見つかりませんでした。

これはこれを支援するコードでもありますが、まだ少し説明していません。

ここの誰かからの助けに感謝します。

ありがとうございました。

4

1 に答える 1

10

達成したいことによっては、カスタム コードをまったく回避できる場合があります。

JUL から SLF4J へのブリッジを使用する

これは、java.util.Logging (JUL) にフックし、すべてのログ イベントを SLF4J に転送するブリッジです。ログ出力を使用すると、SLF4J ロギング実装 (Logback や Log4j など) を使用して、両方のロギング API の結合されたログ出力を書き込むことができます。

JUL から SLF4J へのブリッジを使用すると、MDC をサポートする SLF4J 実装を無料で利用できます。

JUL 拡張機能を作成する

ロギング システムを分離しておきたい場合は、MDC を「読み取り」、その値をログに出力する JUL 拡張機能を作成する必要があります。SLF4J MDC クラスを調べると、そのすべての値にアクセスするためのメソッドがあります: org.slf4j.MDC.getCopyOfContextMap().

デフォルトの JUL ハンドラは非常に限られていることに注意してください。したがって、MDC にアクセスできる独自のものを実装する必要があると思います。ただし、最初にそれらが同じスレッド内から呼び出されていることを確認する必要があります。

于 2013-06-08T07:29:02.147 に答える