在rsyslogd中同时按程序名和日志级别过滤日志消息

Mar*_*vac 6 logging rsyslog

我想将foobar日志级别的程序中的日志消息保存err/var/log/foobar.logrsyslogd 中的文件中。我怎样才能做到这一点?

这是我可以按程序名称过滤消息的方法:

:programname,contains,"foobar" /var/log/foobar.log
Run Code Online (Sandbox Code Playgroud)

这是我如何按日志级别过滤消息:

*.err /var/log/foobar.log
Run Code Online (Sandbox Code Playgroud)

但我不明白如何同时通过这两个过滤器进行过滤。

cor*_*ump 7

rsyslogd wiki 上的这个例子提出了一种方法来做你想做的事情。它是使用基于表达式的语法部分按程序名称过滤

使用维基上提供的示例:

if $programname == 'foobar' and $syslogseverity-text == 'error' then /var/log/foobar.log 
Run Code Online (Sandbox Code Playgroud)

将其放在 rsyslogd.conf 或作为 rsyslog.d 中的片段