在我的配置文件中,我使用
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”作为文件路径(包括文件名),因此我可以区分来自不同应用程序的日志(每个应用程序记录到不同的文件)。
怎么做?
谢谢!
答案 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,马克