【问题标题】:log4j 1.2.17 + MDC + UDPlog4j 1.2.17 + MDC + UDP
【发布时间】:2015-05-08 21:13:46
【问题描述】:

我有一个将 log4j 1.2.17 与 MDC 结合使用的应用程序。我设法使用org.apache.log4j.net.SocketAppender 配置远程日志记录,它使用 TCP 协议:

<appender name="EXTLOG" class="org.apache.log4j.net.SocketAppender">
    <param name="RemoteHost" value="host" />
    <param name="ReconnectionDelay" value="60000" />
    <param name="Threshold" value="TRACE" />
</appender>

现在我想切换到 UDP 协议。我切换到org.apache.log4j.net.SyslogAppender,但SyslogAppender 不支持MDC(以结构化方式)。 我知道 MDC 在 log4j2 中有更多支持,有没有办法在 log4j 1.2.* 中使用 UDP 公开 MDC 的日志记录?

【问题讨论】:

    标签: java logging udp log4j mdc


    【解决方案1】:

    我还没有在 log4j 级别找到解决此问题的方法。似乎 log4j2 对所描述的功能有更好的支持,但它的语法与 log4j 不兼容。 所以,我决定将我的日志迁移到 Logback。我使用了“net.logstash.logback.appender.LogstashSocketAppender”。它是一个 UDP appender,它完全支持 MDC(你只需要在 Logstash 上配置 JSON 解析器)。

    【讨论】:

      【解决方案2】:

      看看这里:logstash-gelf。该库可以使用 logstash 上提供的 GELF 规范通过各种传输(TCP、UDP 和 Redis)传输您的日志事件。它可用于 log4j、log4j2、logback、java.util.logging 和 JBossAS 7/Wildfly 8。

      您拥有完整的 MDC 支持,并且能够配置 MDC 功能,以便控制您获得的内容:

      <appender name="gelf" class="biz.paluch.logging.gelf.log4j.GelfLogAppender">
          <param name="Host" value="udp:localhost" />
          ...
      
          <!-- This are static fields -->
          <param name="AdditionalFields" value="fieldName1=fieldValue1,fieldName2=fieldValue2" />
      
          <!-- This are fields using MDC -->
          <param name="MdcFields" value="mdcField1,mdcField2" />
          <param name="DynamicMdcFields" value="mdc.*,(mdc|MDC)fields" />
          <param name="IncludeFullMdc" value="true" />
      </appender>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2022-01-16
        • 2020-03-29
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        相关资源
        最近更新 更多