我正在尝试过滤某些日志文件的日志级别。我的问题是Grok似乎无法处理过滤器开始处的\w
。
我正在使用此网站来验证正则表达式:https://regexr.com/
我正在使用此站点测试Grok过滤器:http://grokdebug.herokuapp.com/
这是我的示例日志行:2020-04-07T13:08:19.261-0700 | INFO |||
这是我要运行的内容:
(?<timestamp>.+?(?=\|))(?<loglevel>\w+?(?= \|))
这表示未找到匹配。如果我将“ \ w”替换为“”。它会立即找到该行,但保留非字母字符:
{
"timestamp": [
[
"2020-04-07T13:08:19.261-0700"
]
],
"loglevel": [
[
"|INFO"
]
]
}
应该应该一定有效。它只是说匹配\ w字符。我在这里显然缺少正则表达式知识。是否有人知道发生了什么并愿意以我的方式抛出一些指点?
您的正则表达式与字符串不正确匹配,因为(?=\|)
是非消耗性模式,并且该模式在使用\w
标记时间戳后无法匹配空格。
您可以使用以下方法修复当前模式:>
(?<timestamp>.+?)\|(?<loglevel>\w+) \| ^^ ^^^
无论如何,这些字段都是使用命名的组捕获创建的,因此这里不需要环顾四周。
注意,您可能会实际使用
%{TIMESTAMP_ISO8601:timestamp}\|%{LOGLEVEL:loglevel}
解析您当前的输入。