logstash:在log4j-input中,“path”不正确

时间:2015-06-05 21:05:18

标签: logstash

在我的配置文件中,我使用

input { log4j {} }

和:

output { stdout { codec => rubydebug } }

attached my log4j to logstash using SocketListener。当我的应用程序将某些内容打印到日志中时,我会在logstash中看到:

{
"message" => "<the message>",
"@version" => "1",
"@timestamp" => "2015-06-05T20:28:23.312Z",
"type" => "log4j",
"host" => "127.0.0.1:52083",
"path" => "com.ohadr.logs_provider.MyServlet",
"priority" => "INFO",
"logger_name" => "com.ohadr.logs_provider.MyServlet",
"thread" => "http-apr-8080-exec-3",
"class" => "?",
"file" => "?:?",
"method" => "?",
}

问题是“路径”字段是错误的:AFAI明白,它应该是日志文件的路径;相反,我得到与“logger_name”相同的值。

我的tomcat上有几个应用程序,我想从中收集日志。我需要“path”作为文件路径(包括文件名),因此我可以区分来自不同应用程序的日志(每个应用程序记录到不同的文件)。

怎么做?

谢谢!

1 个答案:

答案 0 :(得分:1)

<appender name="gelf" class="biz.paluch.logging.gelf.log4j.GelfLogAppender"> <param name="Threshold" value="INFO" /> <param name="Host" value="udp:localhost" /> <param name="Port" value="12201" /> <param name="Version" value="1.1" /> <param name="Facility" value="java-test" /> <param name="ExtractStackTrace" value="true" /> <param name="FilterStackTrace" value="true" /> <param name="MdcProfiling" value="true" /> <param name="TimestampPattern" value="yyyy-MM-dd HH:mm:ss,SSSS" /> <param name="MaximumMessageSize" value="8192" /> <!-- This are static fields --> <param name="AdditionalFields" value="fieldName1=fieldValue1,fieldName2=fieldValue2" /> <!-- This are fields using MDC --> <param name="MdcFields" value="mdcField1,mdcField2" /> <param name="DynamicMdcFields" value="mdc.*,(mdc|MDC)fields" /> <param name="IncludeFullMdc" value="true" /> </appender> 输入是TCP套接字上的侦听器。没有文件路径。

要解决您的挑战,您可以配置多个TCP端口,因此每个应用程序都会记录到不同的TCP端口,或者您可以使用GELF。 GELF是基于UDP的协议,但您需要额外的jar。 logstash还支持GELF作为本机输入。您可以在许多GELF appender中指定静态字段,这样就可以区分应用程序级别,当前正在记录哪个应用程序。

您可以找到here示例:

NewresultsFromQuery = (List<string>)Session["newResult"];

HTH,马克