真的很简单,Log4j SyslogAppender是否支持MDC和NDC,因为输出是结构化数据,即使用协议的结构化数据功能?
此外,对于可以放在MDC中并成功添加到日志中的内容,是否有任何限制?
发布于 2009-06-03 10:02:08
MDC或NDC都是Syslog协议的一部分。因此,log4j不(也不能)支持Syslog协议的结构化数据中的MDC/NDC。但是,通过将ConversionPattern参数设置为包含MDC信息,您可以将MDC或NDC数据添加到syslog消息的" message“部分。
以下是关键字为"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中设置的值没有限制。
发布于 2009-06-02 11:11:14
看看源代码,我看不出有任何理由不应该这样做。
您是否尝试过成功地写入syslog,然后使用NDC/MDC中的内容进行写入?请注意,您必须在PatternLayout中启用此功能(使用%x或%X)。
MDC似乎对您可以插入的内容没有任何限制(同样,基于对源代码的检查)。我怀疑MDC的编写只是简单地对MDC的内容执行一次toString(),因此您可能会受到对象以这种方式呈现时的有用程度/可读性的限制。
https://stackoverflow.com/questions/938907
复制相似问题