logstash:在 log4j 输入中,"path" 不正确
logstash: in log4j-input, the "path" is not correct
在我的配置文件中,我使用
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" => "?",
}
问题是"path"字段错误:AFAI理解,应该是日志文件的路径;相反,我得到与 "logger_name" 相同的值。
我的 tomcat 上有几个应用程序,我想从中收集日志。我需要 "path" 作为文件路径(包括文件名),这样我就可以区分来自不同应用程序的日志(每个应用程序记录到不同的文件)。
如何做到?
谢谢!
log4j
输入是 TCP 套接字上的侦听器。没有文件路径。
要解决您的挑战,您可以配置多个 TCP 端口,这样每个应用程序都会登录到不同的 TCP 端口,或者您可以使用 GELF。 GELF 是基于 UDP 的协议,但您需要额外的 jar。 logstash 还支持 GELF 作为本机输入。您可以在许多 GELF appenders 静态字段中指定,因此您可以在应用程序级别区分当前正在记录哪个应用程序。
你可以找到here一个例子:
<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>
HTH,马克
在我的配置文件中,我使用
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" => "?",
}
问题是"path"字段错误:AFAI理解,应该是日志文件的路径;相反,我得到与 "logger_name" 相同的值。
我的 tomcat 上有几个应用程序,我想从中收集日志。我需要 "path" 作为文件路径(包括文件名),这样我就可以区分来自不同应用程序的日志(每个应用程序记录到不同的文件)。
如何做到?
谢谢!
log4j
输入是 TCP 套接字上的侦听器。没有文件路径。
要解决您的挑战,您可以配置多个 TCP 端口,这样每个应用程序都会登录到不同的 TCP 端口,或者您可以使用 GELF。 GELF 是基于 UDP 的协议,但您需要额外的 jar。 logstash 还支持 GELF 作为本机输入。您可以在许多 GELF appenders 静态字段中指定,因此您可以在应用程序级别区分当前正在记录哪个应用程序。
你可以找到here一个例子:
<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>
HTH,马克