让我们想象一下我的日志文件如下:
My custom exception ST: java.lang.RuntimeException: Text of this dummy err.
我的最终目标是将ST:
之后的所有内容都放在新的字段ST上,并删除ST:
。
我正在尝试使用该模式,但它不起作用。
filter {
grok {
match => { "message" => "(?<newField>(?<=ST)(?s)(.*$))" }
}
Grok基于Oniguruma Regex库。要使.
与Oniguruma Regex匹配任何字符,您需要通过(?m)
内联修饰符,而不是(?s)
(如PCRE和其他一些正则发动机(。
通过将(?<=ST)
阳性lookahead放置在命名捕获组中,您需要ST
立即出现在当前位置之前,但是您将有ST
和一个冒号,然后是一个空间。只需将ST:
移出命名组:
"(?m)ST: (?<newField>.*)"
^^^^^^^^
ST:
和空间将得到匹配和消耗,newField
组将保存其余的字符串。
您可以使用类似的特定正则等级:
^My custom exception ST: %{GREEDYDATA:ST}
或更富裕的一个:
%{GREEDYDATA} bSTb: %{GREEDYDATA:ST}
始终尝试使用特定的正直。