1

我有一个使用带有 MDC 的 log4j 1.2.17 的应用程序。我设法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 的日志记录?

4

2 回答 2

0

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

于 2015-06-04T16:53:47.853 回答
0

看看这里: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>
于 2015-07-13T05:31:14.287 回答