假设我想过滤日志以使用每个用户 ID 的不同文件,我可以为每个 uid 编写一个规则,如下所示:
if $msg contains 'uid=500' then /var/log/uid/500
if $msg contains 'uid=501' then /var/log/uid/501
if $msg contains 'uid=502' then /var/log/uid/502
我想用这样的正则表达式捕获写一行:
if $msg contains 'uid=\([0-9]+\)' then /var/log/uid/\1
有可能吗?请问如何?
您可以使用属性替换器来执行此操作。放入您的
rsyslog.conf
或类似的定义模板的行,该模板是所需的文件名格式,并在匹配输入行时在操作中使用它。例如,模板说模板变量
myfile
是字符串,包括msg
由正则表达式 (R) 匹配、扩展 (ERE)、组捕获 1 (1) 替换的属性(如果不匹配,则保留原始 FIELD)。实际的正则表达式是.*?uid=([0-9]+).*
一部分。--end
是%...:R,...--end%
序列的必需部分。以下行是您要匹配的行的常用 Rainer 脚本测试,以及放置结果的位置。