Log4j SyslogAppender是否支持MDC和NDC

时间:2009-06-02 10:52:33

标签: log4j syslog mdc structured-data ndc

简单来说,Log4j SyslogAppender是否支持MDC和NDC,因为输出是结构化数据,即使用协议的结构化数据功能?

此外,对于可以放入MDC并成功附加到日志中的内容是否有任何限制?

2 个答案:

答案 0 :(得分:7)

MDC和NDC是Syslog协议的一部分。因此,log4j不支持(也不能)支持Syslog协议的结构化数据中的MDC / NDC。但是,通过将ConversionPattern参数设置为包含MDC信息,没有什么可以阻止您在syslog消息的“消息”部分中添加MDC或NDC数据。

以下是使用密钥“ki”的MDC条目的示例:

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

对于NDC,您只需将“%X {ki}替换为”%x“(请注意使用小写字母)。

至于问题的第二部分,您可以在MDC或NDC中放置的值没有限制。

答案 1 :(得分:1)

查看源代码,我认为没有任何理由不应该这样做。

您是否尝试过成功写入syslog,然后在NDC / MDC中写一些内容?请注意,您必须在PatternLayout中启用此功能(使用%x或%X)。

MDC似乎对您可以插入的内容没有任何限制(同样,基于检查源代码)。我怀疑MDC编写只会对MDC的内容执行toString(),因此您可能会受限于以这种方式呈现对象时的有用/可读性。

相关问题