代码之家  ›  专栏  ›  技术社区  ›  Simon Gibbs

Log4j SyslogAppender是否支持MDC和NDC

  •  4
  • Simon Gibbs  · 技术社区  · 15 年前

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

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

    2 回复  |  直到 15 年前
        1
  •  7
  •   Ceki    15 年前

    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
    

        2
  •  1
  •   Brian Agnew    15 年前

    看看源代码,我看不出有什么理由不应该这样做。

    您是否尝试过成功地写入syslog,然后在NDC/MDC中使用某些东西进行写入?请注意,您必须在 PatternLayout (使用%x或%x)。

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

    推荐文章