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

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

这是我可以通过程序名称筛选消息:

 :programname,contains,"foobar" /var/log/foobar.log 

这是我可以通过日志级别过滤消息:

 *.err /var/log/foobar.log 

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

rsyslogd wiki上的这个示例提供了一种方法来执行您想要的操作。 这是通过程序名称使用基于expression式的语法部分进行过滤

使用wiki上提供的示例:

 if $programname == 'foobar' and $syslogseverity-text == 'error' then /var/log/foobar.log 

把它放在rsyslogd.conf中或作为rsyslog.d中的代码片段

一个简单的方法是… if($ program包含“foobar”)和($ severity包含“err”),那么/ var / log / foobar.log

当然还有很多其他的方法,但是我认为以上是非常简单的。