假设我有如下日志文件:
My custom exception ST: java.lang.RuntimeException: Text of this dummy err.
我的最终目标是将ST:
之后的所有内容放入新的字段ST中,并删除ST:
。
我正在尝试使用该模式,但是它不起作用。
filter {
grok {
match => { "message" => "(?<newField>(?<=ST)(?s)(.*$))" }
}
答案 0 :(得分:0)
Grok是based on Oniguruma正则表达式库。要使.
与任何带有Oniguruma regex的字符匹配,您需要传递(?m)
内联修饰符,而不是(?s)
(如PCRE和其他正则表达式引擎一样)。
通过将(?<=ST)
正向超前放置在命名的捕获组中,您需要ST
出现在当前位置之前,但是您必须在ST
和冒号之后加上一个空间。 只需将ST:
从命名组中移出即可:
"(?m)ST: (?<newField>.*)"
^^^^^^^^
ST:
和空格将被匹配并消耗,newField
组将在其中保留其余字符串。
答案 1 :(得分:0)
您可以使用特定的正则表达式:
^My custom exception ST: %{GREEDYDATA:ST}
或更通用的一个:
%{GREEDYDATA} \bST\b: %{GREEDYDATA:ST}
始终尝试使用特定的正则表达式。