我正在测试grok调试器,但是我不能让它解决我的问题。
示例文本:
2014-06-17 04:37:30,317 c.e.A.MyActivity INFO main MyActivity.java 53 com.example.ApLogback.MyActivity$1 onClick logger track
我应该如何构造一个grok正则表达式/模式字符串,以便它将前面的示例文本分成如下部分:
{
timestamp:2014-06-17 04:37:30,317
logger:c.e.A.MyActivity
level:info
caller_thread:main
caller_method:MyActivity.java
caller_line:53
caller_class:com.example.ApLogback.MyActivity$1
caller_method: onClick
msg: caller track
}
我的当前正则表达式是:
(?<timestamp>[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}) (?<logger>.*)
,但它只将日志字符串的开头部分分成几部分。当前grok字符串的一个示例结果是:
{
"timestamp": [
[
"2014-06-17 04:37:30,317"
]
],
"logger": [
[
"c.e.A.MyActivity INFO main MyActivity.java 53 com.example.ApLogback.MyActivity$1 onClick logger"
]
]
}
Grok附带了许多已经定义的模式,这些模式将覆盖您的大部分需求,查看它们:Grok Debugger/patterns
关于你的问题的具体答案,这里有一个简单的例子可以满足你的需要。这只是一个例子,告诉你如何使用已经定义好的grok模式来构建你自己的模式。(?<timestamp>[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}) (?:%{JAVACLASS:logger}) (?:%{LOGLEVEL:level}) (?:%{WORD:caller_thread}) (?:%{JAVACLASS:caller_file}) (?:%{NONNEGINT:caller_line}) (?:%{JAVACLASS:caller_class}) (?:%{WORD:caller_method}) (?:%{GREEDYDATA:msg})