我有一个使用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日志。*?
答案 0 :(得分:0)
我没有在log4j级别找到此问题的解决方案。似乎log4j2更好地支持所描述的功能,但其语法与log4j不兼容。 所以,我决定将我的日志记录迁移到Logback。我使用过“net.logstash.logback.appender.LogstashSocketAppender”。它是一个UDP appender,它完全支持MDC(你只需要在Logstash上配置JSON解析器)。
答案 1 :(得分: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>