我在发送方那边(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
答案 0 :(得分:1)
SocketAppender不允许使用PatternLayout: How to use Pattern layout with SocketAppender
您可能需要使用SyslogAppender
或TelnetAppender
来做您想做的事。
答案 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
字段。这还不够吗?
它还应该从MDC
和NDC
log4j结构中提取对象,如果它是开发人员可以在其中设置内容的内部应用程序,或者允许您在启动参数中设置值。
https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html
使用我的com.stuartwarren.logit.log4j1.Layout
代码,您只需在配置文件中添加自定义字段,但SocketAppender
似乎没有为您提供该功能,因为您无法设置/改变布局。