2013-05-29 11 views
5

私は、Slf4jとjava.util.Loggingでロギングメカニズムをセットアップしています。私はいくつかのスレッドを持っているので、それらは混在しているので、ログから明確なアイデアを得ることができません。今私はMDC概念を使用して、ログファイルを追加してクリアなものにするようにしています。JUL(Java.util.Logging)のMDC(マップされた診断コンテキスト)のサポート

問題はSlf4jと同じですが、MDCをサポートしていますが、java.util.Loggingはサポートしていません。しかし、基本的な枠組みは、MDCを提供していない場合は、

を言い、たとえば持つjava.util.loggingのために、その後、SLF4JはまだMDCデータを格納しますが、情報は、その中に、カスタムユーザーコードによって取得する必要があります。

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

Thisもこれに役立つコードですが、まだ説明が少しありません。

私はここでいくつかの助けを感謝します。

ありがとうございます。

+0

私は答えを "何か他のものを試してみる"ことを嫌っていますが、...ログバックを使ってみましたか?それはslf4jをサポートするために特別に作られたロガーであり、mdcをサポートしています。 '
ch.qos.logback
logback-古典
0.9.30


ch.qos。logback
logbackコア
0.9.30
'

答えて

6

あなたが達成したいことに応じて、カスタムコードをまったく避けることができるかもしれません。

SLF4J橋に7月を使用し

ザ・はのjava.util.logging(7月)にフックし、すべて転送SLF4Jにイベントをログに記録可能な橋です。ログ出力を使用すると、いずれのSLF4Jロギング実装(LogbackまたはLog4jなど)を使用して、両方のロギングAPIの結合ログ出力を書き込むことができます。

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

を使用すると、分離のロギングシステムを維持したいならば、あなたはログにMDCおよび出力の値を「読み込み」7月の拡張子を記述する必要があります

7月拡張を書きます。 SLF4J MDCクラスを調べると、すべての値にアクセスするためのメソッドがあります:org.slf4j.MDC.getCopyOfContextMap()

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