2009-06-02 5 views

答えて

7

MDCもNDCもSyslogプロトコルの一部です。したがって、log4jは、Syslogプロトコルの構造化データ内でMDC/NDCをサポートしていません(また、サポートすることもできません)。ただし、MDC情報を含めるようにConversionPatternパラメーターを設定することによって、syslogメッセージの「メッセージ」部分にMDCまたはNDCデータを追加することはできません。ここで

は "KI" キーを持つMDCエントリの例です:NDCの場合

log4j.rootLogger=INFO, SYSLOG 
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender 
log4j.appender.SYSLOG.SyslogHost=a.host.name 

# Facility must be one of the case-insensitive strings: 
# KERN, USER, MAIL, DAEMON, AUTH, SYSLOG, LPR, NEWS, UUCP, CRON, 
# AUTHPRIV, FTP, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, 
# LOCAL7 
log4j.appender.SYSLOG.facility=KERN 

log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout 
log4j.appender.SYSLOG.layout.ConversionPattern=%r %p %c %X{ki} - %m\n 

、あなたは下の使用に注意してください(X "%「だけで%X {KIを}" 代わります単にログメッセージにMDC値を追加する場合)。あなたの質問の後半部分については

、あなたはMDCまたはNDCの中に置くことができる値には制限がありません。

+6

誰かがこの人がlog4jか何かを書いていると思うでしょうか? –

+2

Gareth Davis:実際に彼はそうしました。 – cherouvim

1

ソースコードを見ると、どうしてもそうではない理由はありません。

あなたは正常にsyslogに書き込んだり、何かをNDC/MDCに書き込もうとしましたか? PatternLayout(%xまたは%Xを使用)で有効にする必要があります。

MDCには、(ソースコードの検査に基づいて)挿入できる内容に制限はありません。私は、MDCの記述が単にMDCの内容にtoString()を実行すると思われるので、このようにレンダリングしたときのあなたのオブジェクトの有用性/可読性だけでは制限されるかもしれません。

+0

でしょうか、出力だろう私の懸念事項は、後で構造化データを分析することです。 –

+0

これは実装に依存しますあなたのMDC保持オブジェクトのn個(キーで%Xを使用することに注意してください。) –

関連する問題