我投入的样子:
"message" => "ERROR | [default task-55] my.package.className(Class.java:184) | - logstash-ERROR LOG\r",
我logstash配置:
filter {
grok {
match => {"message" => "%{WORD:logLevel} | %{WORD:task} %{WORD:callfrom} | - %{WORD:logmessage}"}
}
}
对log4j的我的配置XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
<Appenders>
<File name="FILE" fileName="logfile.log" append="true">
<PatternLayout pattern="%p | [%t] %l | - %m%n"/>
</File>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%p | [%t] %l | - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="com.memorynotfound" level="debug"/>
<Root level="info">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="FILE"/>
</Root>
</Loggers>
</Configuration>
在kibana我看到日志级别是确定的,我得到正确的记录水平,但换句话说,我不能得到,我从过滤错过了什么?感谢您的帮助!
UPDATE
我想这样的代码:
^(%{WORD:logLevel}) (%{TASK_PATTERN:task}) (%{CLASS:callfrom}) (%{GREEDYDATA:logmessage})$
我的自定义模式:
TASK_PATTERN (^\[.*\]$)
CLASS .*\)
但但它是找到公正的日志级别
这可能是可能得到比这更具体的,但根据grokconstructor,以下工作:
%{WORD:level} \| \[%{WORD:task} %{NOTSPACE:callfrom}\] %{DATA:javaclass} \| - %{GREEDYDATA:message}
请记住,任何不匹配的字符,如|
或[
仍然需要占神交之内。此外,these patterns是你可以免费做一个很好的参考点。