2016-08-23 102 views
2

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

这是我原来的Log4j配置的一个片段:

log4j.appender.logstash=org.apache.log4j.net.SocketAppender 
log4j.appender.logstash.layout=org.apache.log4j.PatternLayout 
log4j.appender.logstash.layout.ConversionPattern=%d{HH: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=%d{HH:mm:ss.SSS} %-5p %c {2} %x - %m%n 
appender.logstash.host=logs.example.com 
appender.logstash.port=4560 
appender.logstash.reconnectionDelayMillis=10000 

然而,当我这样做,我的控制台和档案appender工作得很好,但LogStash appender抛出一个Broken pipe错误。

我看着这一个似乎我可能需要包裹SocketAppenderAsyncAppender和指向ref对我logStash SocketAppender(如this documentation),但后来我得到不同的是,性不存在: appender.async.type =异步 appender.async.ref = logStash#或 '裁判', '附加器-REF' 等

是一个.properties文件不是去异步的Socket附加目的地的方式吗?我可以通过这个属性文件使用一些帮助从Log4j 1迁移到2。

+0

它似乎是已知的问题。你应该更新你的logstash-log4j2到更新的版本 - 根据这个链接:https://github.com/jurmous/logstash-log4j2/issues/3。 – asch

+0

没错,就是这样。如果你不介意张贴这个答案,我可以接受它。 – Igor

+0

我编辑了答案。 – asch

回答

2

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

此外,appender的名字是不是SocketAppender插座 - 这是根据documentation example,这插座在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 
... 

我知道这是习惯和“do-n不要改变工作代码“的方法,但是在迁移到log4j2时,可能需要转移到xml配置格式,因为文档中的大量示例正在使用它。

+0

我试过了,仍然没有运气: - 我认为你有一点关于迁移到XML,也许值得移植到它。 – Igor

+0

XML方法也没有运气。 – Igor