这样的日志内容:
[2018-07-09 11:30:59] [13968] [INFO] [1e74b6b7-fcb2-4dde-a259-7db1de0350ea] run entry() 11ms
[2018-07-09 11:30:59] [13968] [INFO] [1e74b6b7-fcb2-4dde-a259-7db1de0350ea] entry done
第一行记录了带有执行时间的函数调用信息,另一行是正常记录。
现在,我想匹配所有这些对象,并且如果行中有执行时间,我想匹配它。
我写这样的grok模式:
\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{NUMBER:process_id}\] \[%{LOGLEVEL:loglevel}\] \[%{UUID:request_id}\] %{DATA:message}(\s%{NUMBER:use_time}ms)?
它不起作用。匹配结果为:
{
"process_id": "13968",
"loglevel": "INFO",
"message": "",
"request_id": "1e74b6b7-fcb2-4dde-a259-7db1de0350ea",
"timestamp": "2018-07-09 11:30:59"
}
如果将DATA:message更改为GREEDYDATA:message,则无法匹配执行时间。
答案 0 :(得分:0)
我通过使用原始正则表达式替换总消息字段来解决它:
\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{NUMBER:process_id}\] \[%{LOGLEVEL:loglevel}\] \[%{UUID:request_id}\] (?<message>.+ (?:(?<use_time>\d+(?:\.\d+)?)ms)?.*)