将 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的主要内容,如果未能解决你的问题,请参考以下文章