rsyslog 过滤消息内容和设施

Kyl*_*ndt 6 logging syslog rsyslog

我找到了一些示例,说明如何使用 rsyslog 根据日志条目的内容进行过滤。但是有没有办法做到这一点,所以它只过滤某个设施的内容?例如类似的东西:

if local0.* msg contains "foo"
Run Code Online (Sandbox Code Playgroud)

但是使用真正的语法而不是我刚刚编造的。

Aar*_*ley 5

您需要执行两个连续的过滤器,而不是在一行上执行两个过滤器。

:msg, contains, "some-text"
if $syslogfacility-text == "facility" then /var/log/somelog.log
~

编辑:

我收回之前说过的话。我现在已经看到这两种方式都是这样做的。我刚刚在 rsyslog Wiki 中找到了这个示例,应该可以进行改编。

if $programname == 'popa3d' and $syslogseverity <= '6' then /var/log/popa3d.log

您当然会将您的条件替换为示例。

if $syslogfacility-text == 'local0' and $msg contains 'some-text' then /var/log/somelog.log
& ~

Rsyslog 维基
Rsyslog 文档

  • 是的,rsyslog 的文档令人难过。不仅在他们的网站上,而且在整个网络上。格式、完整性、一致性......等等。看起来 rsyslog 已经经历了三次重新开发迭代,并且您正在运行的发布和兼容模式也可以极大地改变语法。 (5认同)