我想将以下消息重定向到日志文件中:
"[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