将 LogStash Log4j 配置升级到 Log4j2

Posted

技术标签:

【中文标题】将 LogStash Log4j 配置升级到 Log4j2【英文标题】:Upgrading LogStash Log4j configuration to Log4j2 【发布时间】:2016-12-30 18:29:53 【问题描述】:

我正在尝试将我的 Spring Boot 应用程序从 Log4j 迁移到 Log4j 2。我了解 Log4j 2 从原始 Log4j 更改了 .properties 配置的语法。

这是我原始 Log4j 配置的 sn-p:

log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.layout=org.apache.log4j.PatternLayout
log4j.appender.logstash.layout.ConversionPattern=%dHH:mm:ss.SSS %-5p %c 2 %x - %m%n
log4j.appender.logstash.Port=4560
log4j.appender.logstash.RemoteHost=logs.example.com
log4j.appender.logstash.ReconnectionDelay=10000

对于 Log4j 2,这是我更新的内容:

appender.logstash.type=SocketAppender # Or 'Socket'
appender.logstash.name=logStash
appender.logstash.layout.type=PatternLayout
appender.logstash.layout.pattern=%dHH:mm:ss.SSS %-5p %c 2 %x - %m%n
appender.logstash.host=logs.example.com
appender.logstash.port=4560
appender.logstash.reconnectionDelayMillis=10000

但是,当我这样做时,我的控制台和文件附加程序工作得很好,但 LogStash 附加程序会引发 Broken pipe 错误。

我已经对此进行了研究,似乎我可能需要将SocketAppender 包装在AsyncAppender 中并将ref 指向我的logStash SocketAppender(如this documentation),但后来我得到了属性不存在的例外情况: appender.async.type=异步 appender.async.ref=logStash # 或者 'refs'、'appender-ref' 等

.properties 文件不是异步套接字附加程序的方式吗?我可以通过这个属性文件在从 Log4j 1 迁移到 2 时使用一些帮助。

【问题讨论】:

这似乎是已知问题。您可能应该将您的 logstash-log4j2 更新到较新的版本 - 根据此链接:github.com/jurmous/logstash-log4j2/issues/3。 是的,就是这样。如果您不介意将其发布为答案,我可以接受。 我已经编辑了答案。 【参考方案1】:

旧版本的 logstash-log4j2 存在问题。它已在 3.2 版中修复。较新的版本可能来自此link。

此外,appender 名称不是 SocketAppender 而是 Socket - 即根据 documentation example,它使用名称 Socket 在log4j2.xml:

<Appenders>
    <Socket name="socket" host="localhost" port="9500">
      <SerializedLayout />
    </Socket>
</Appenders>

我想你应该相应地改变你的 log4j2.properties:

appender.logstash.type=Socket
appender.logstash.name=logStash
appender.logstash.layout.type=PatternLayout
...

我知道这是习惯问题和“请勿更改工作代码”方法,但在迁移到 log4j2 时可能值得迁移到 xml 配置格式,因为在文档正在使用它。

【讨论】:

我试过了,但还是没有运气:-\ 我认为你有一点关于迁移到 XML 的观点,也许值得迁移到它。 XML 方法也不行。

以上是关于将 LogStash Log4j 配置升级到 Log4j2的主要内容,如果未能解决你的问题,请参考以下文章

Logstash 如何与 Syslog 集成?

logback的MDC机制

logback解析——Appender

Lo4j的配置一

lo4j2配置示例

Zookeeper的服务器的log4j升级为log4j2的升级方案(忽略配置化兼容问题)