无法让Log4J SocketAppender工作

时间:2014-04-08 20:44:33

标签: java log4j logstash

我的Java项目使用Log4J2。目前,它已成功将日志写入文件。现在,我试图通过Socket Appender将日志推送到LogStash。不幸的是,我对这些努力没有任何成功。目前,我正在查看两个部分:我的log4j2.xml文件和我的logstash配置文件。我在这里提供了两个,希望有人可以帮我识别我的问题。

log4j2.xml

<Configuration status="WARN" monitorInterval="30">
  <Appenders>
    <Socket name="A1" host="0.0.0.0" port="4560">
      <SerializedLayout/>
    </Socket>

    <RollingRandomAccessFile name="RollingFile" fileName="/logs/server.log"
                             filePattern="/logs/$${date:yyyy-MM}/server-%d{yyyy-MM-dd-HH}-%i.log.gz">
      <JSONLayout complete="false"></JSONLayout>
      <Policies>
        <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
        <SizeBasedTriggeringPolicy size="100 MB"/>
      </Policies>
    </RollingRandomAccessFile>
    <Async name="AsyncFile">
      <AppenderRef ref="RollingFile"/>
    </Async>
  </Appenders>
  <Loggers>
    <Logger name="com.company" level="trace" additivity="false">
      <AppenderRef ref="AsyncFile"/>
    </Logger>
    <Root level="trace">
      <AppenderRef ref="AsyncFile"/>
    </Root>
  </Loggers>
</Configuration>

这是我的log4j2配置。这是我的logstash配置:

logstash.conf

input {
  log4j {
    mode => "server"
    type => "log4j"
    host => "0.0.0.0"
    port => "4560"
  }
}
output {
  stdout {
    codec => "json"
  }
}

我使用logstash-1.4.0/bin/logstash --config /etc/logstash/logstash.conf --debug从命令行启动logstash。我没有看到任何错误。同时,我没有看到任何日志写入控制台窗口。我知道应该出现日志,因为它们出现在我的滚动server.log文件中,该文件被配置为log4j中的第二个appender。

我做错了什么?我已经纠结了3天了。

2 个答案:

答案 0 :(得分:2)

Logstash中的log4j输入与Log4j2不兼容。 Log4j2使用新格式来序列化日志数据。

但是有一个插件可以解析Log4j2套接字: https://github.com/jurmous/logstash-log4j2

在logstash 1.5+中,可以从以下位置安装: https://rubygems.org/gems/logstash-input-log4j2

答案 1 :(得分:1)

我认为您应该使用以下行中的IP替换0.0.0.0

<Socket name="A1" host="0.0.0.0" port="4560">

在元素<Root ...><Logger ...>中添加以下几行(就像您对AsyncFile appender所做的那样):

<AppenderRef ref="A1" />
<AppenderRef ref="RollingFile" />