4

真的很简单,Log4j SyslogAppender 是否支持 MDC 和 NDC,因为输出是结构化数据,即使用协议的结构化数据特性?

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

4

2 回答 2

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”(注意使用小写字母)。

As for the second part of your question, there are no limits to the values you can place within MDC or NDC.

于 2009-06-03T10:02:08.243 回答
1

查看源代码,我看不出它不应该的任何理由。

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

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

于 2009-06-02T11:11:13.663 回答