如何在发送方指定Logstash的Log4j ConversionPattern?

时间:2014-06-16 08:48:50

标签: jboss log4j logstash

我在发送方那边(jboss的log4j.properties文件):

log4j.appender.LOGSTASH=org.apache.log4j.net.SocketAppender
log4j.appender.LOGSTASH.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGSTASH.layout.ConversionPattern=%-5p %t %d{ISO8601} %l - %m%n
log4j.appender.LOGSTASH.RemoteHost=my.server.com
log4j.appender.LOGSTASH.ReconnectionDelay=60000
log4j.appender.LOGSTASH.Threshold=DEBUG

但是在接收端我总是收到一些默认消息,ConversionPattern不起作用,即使我删除了所有内容并只放了一个文本。我有四个jboss实例,因此我必须在每个发件人端定义一些特定的文本,例如log4j.appender.LOGSTASH.layout.ConversionPattern=server1 %-5p %t %d{ISO8601} %l - %m%n

3 个答案:

答案 0 :(得分:1)

SocketAppender不允许使用PatternLayout: How to use Pattern layout with SocketAppender

您可能需要使用SyslogAppenderTelnetAppender来做您想做的事。

答案 1 :(得分:0)

或者编写自己的appender,实际上非常简单。只需扩展org.apache.log4j.AppenderSkeleton。

这是我尝试使用ZeroMQ(http://zeromq.org/intro:read-the-manual)appender和JSON(需要最少处理)布局,我用于Logstash。

https://github.com/stuart-warren/logit

产生类似于:

的输出
{"message":"Hello World!","test":"other","@timestamp":"2013-10-06T21:22:09.868Z","level":"DEBUG","mdc":{"field_name_here":"detail goes here"},"thread":"main","logger":"com.stuartwarren.test_logit.log4j1.LogIt","@version":"1"}

注意:对于基础设施人员来说,远非完美,但并非糟糕的第一枪。

答案 2 :(得分:0)

我假设您正在使用的Logstash log4j插件https://github.com/elasticsearch/logstash/blob/v1.4.1/lib/logstash/inputs/log4j.rb似乎将主机名从发送服务器提取到host字段。这还不够吗?

它还应该从MDCNDC log4j结构中提取对象,如果它是开发人员可以在其中设置内容的内部应用程序,或者允许您在启动参数中设置值。 https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html

使用我的com.stuartwarren.logit.log4j1.Layout代码,您只需在配置文件中添加自定义字段,但SocketAppender似乎没有为您提供该功能,因为您无法设置/改变布局。