Java日志多由多行行组成,初始行之后的每一行以空格开头,如下例所示:在这种情况下,需要在将事件数据output之前处理多行事件。
log
[ERROR] - 2018-09-21 04:19:57.685 (SocketTransfer.java:73) - Socket交互遇到错误
Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
配置multiline参数如下:Multiline codec plugin
参数 | 说明 |
---|---|
pattern | 指定正则表达式。与指定正则表达式匹配的行被视为前一行的延续或新多行事件的开始。 |
what | previous或next。该previous值指定与pattern选项中的值匹配的行是上一行的一部分。该next值指定与pattern选项中的值匹配的行是以下行的一部分 |
negate | true或false(默认为false)。如果true,与pattern模式不匹配的消息将构成多行过滤器的匹配what并将应用。 |
sh
|
|
如上列日志格式为
sh
|
|
一般情况下,我们不需要将对其grok,因grok会大量影响性能。如上列格式需要对每一列进行grok
sh
|
|
根据以上格式写出如下的正则
logstash
filter {
grok {
match => {
'message' => "\[\s?%{LOGLEVEL:lev}\] - %{TESTTIME:date}\s+\((?<\class>.*\.java\:\d+)\)\s\-\s(?<\msg>.*)"
}
}
mutate {
remove_field => "message"
}
}
匹配到的日志格式
sh
|
|