Jboss 如何为发送方的Logstash指定Log4j转换模式?

Jboss 如何为发送方的Logstash指定Log4j转换模式?,jboss,log4j,logstash,Jboss,Log4j,Logstash,我在发送方有这个(jboss的log4j.properties文件): 但在接收端,我总是收到一些默认消息,转换模式不起作用,甚至我删除了所有内容,只在那里放了一条文本。我有四个jboss实例,因此在每个发送方定义一些特定的文本对我来说至关重要,例如log4j.appender.LOGSTASH.layout.ConversionPattern=server1%-5p%t%d{ISO8601}%l-%m%nSocketAppender不允许模式布局请参见: 您可能需要使用SyslogAppend

我在发送方有这个(jboss的log4j.properties文件):


但在接收端,我总是收到一些默认消息,转换模式不起作用,甚至我删除了所有内容,只在那里放了一条文本。我有四个jboss实例,因此在每个发送方定义一些特定的文本对我来说至关重要,例如
log4j.appender.LOGSTASH.layout.ConversionPattern=server1%-5p%t%d{ISO8601}%l-%m%n
SocketAppender不允许模式布局请参见:


您可能需要使用
SyslogAppender
TelnetAppender
来做您想做的事情。

或编写您自己的appender,实际上相当简单。只需扩展org.apache.log4j.AppenderSkeleton

下面是我尝试使用ZeroMQ()appender和JSON(需要最少的处理)布局,用于Logstash

产生的输出类似于:

{"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"}
注意:还远远不够完美,但对于一个基础设施人员来说,这是一个不错的第一枪。

我假设您正在使用的Logstash log4j插件似乎可以将主机名从发送服务器提取到
主机
字段。这还不够吗

它还应该从
MDC
NDC
log4j结构中提取对象,如果它是一个内部应用程序,开发人员可以在其中设置一些内容,或者允许您在启动参数中设置一个值。


使用我的
com.stuartwarren.logit.log4j1.Layout
代码,您可以在配置文件中添加自定义字段,但是
SocketAppender
似乎没有给您这种能力,因为您无法设置/更改布局。

对不起,我不能使用您的方案,因为它是企业环境。确切地说,是哪个方案?写你自己的appender/布局,还是使用我链接到的hacky?你能修改你的问题,说明你的限制是什么,然后我们可以给出一个更合适的答案。谢谢。是的,我知道我可以在接收方反序列化日志,但这相当耗时:(但似乎我没有其他选择。我将使用shipper.conf进行日志存储(在接收方)出于这些目的。您可能会遇到SyslogAppender问题,因为大多数syslog服务器默认情况下会截断长度超过1024个字符的消息。这将包括您显然希望捕获的堆栈跟踪。我认为,您可以使用SyslogAppender直接记录到logstash的syslog输入,而不必担心这一点(我从来没有这样做过,但它应该会起作用)
{"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"}