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

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

我想将程序中foobar具有日志级别的日志消息保存err到 rsyslogd 文件/var/log/foobar.log中。我该怎么做?

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

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

以下是我按日志级别过滤消息的方法:

*.err /var/log/foobar.log

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

答案1

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

使用 wiki 上提供的示例:

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

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

答案2

一个简单的方法是...如果($program包含“foobar”)并且($severity包含“err”)那么/var/log/foobar.log

当然还有许多其他方法,但我认为上述方法非常简单。

相关内容