正则表达式不适用于 rsyslog conf 中的 [][]

正则表达式不适用于 rsyslog conf 中的 [][]

我想将以下消息重定向到日志文件中:

"[example]:[foo][bar]: "
"[example]:[foo][hello]: "
"[example]:[foo][world]: "
"[example]:[foo][other]: "
"[example]:[foo][text]: "

中的内容3rd field是仅包含小写[az]的动态文本:

"[example]:[foo][.*]: "

contains如果我使用“ ”关键字创建 rsyslog conf 文件,它就可以工作:

:msg, contains, "[example]:[foo]" -/var/log/example.log

但以下正则表达式根本不起作用,没有记录任何消息:

:msg, regex, "\[example\]\:\[foo\]\[.*\]\:\ " -/var/log/example.log

我的正则表达式出了什么问题?

如何编写正确的正则表达式来匹配上述消息并包含所有必填字段?

答案1

问题是过滤器命令的处理有两个阶段,每个阶段都解释反斜杠转义。结果是,如果您想匹配文字,[那么您的正则表达式模式是\[,但您需要转义反斜杠,因为您将模式作为字符串提供,因此必须使用\\[

您不需要转义:, ], 也不需要空格,所以您可以使用

:msg, regex, "\\[example]:\\[foo]\\[.*]: " -/var/log/example.log

相关内容