让 Syslog 同时记录到 syslog 和自定义日志文件

让 Syslog 同时记录到 syslog 和自定义日志文件

在系统日志(Raspbian rsyslog swVersion="8.1901.0")中,

我正在尝试将包含特定字符串的系统消息与/var/log/syslog(默认)和自定义的单独日志文件进行匹配/过滤,即:/var/log/nut.log

通过放置以下过滤器行,我已经能够实现/etc/rsyslog.conf

# NUT logging: Include USB msgs since montoring UPS via only USB
:msg,contains,"USB" /var/log/nut.log
& stop
:msg,contains,"nut-" /var/log/nut.log
& stop

& stop一旦匹配成功,就需要停止过滤器。我相信首选方法是将其放在专用文件中,即:/etc/rsyslog.d/0-nut.conf

但是,当我这样做时,过滤器会停止记录到/var/log/syslog,而只记录到/var/log/nut.log......?

还有其他方法可以做到这一点吗?

谢谢!

答案1

中的$IncludeConfigor指令出现在大多数标准规则之前,包括将消息写入 的规则。如果您在此文件中的其他规则之后添加规则,那么在匹配并写入 之前,nut 消息就已经被写入。include()rsyslog.conf/var/log/syslogsyslognut.log

相反,如果你将规则放在单独的文件中,则消息将被写入nut.log,然后stop将跳过后面的规则。答案是不要使用stop

如果问题在于一条消息可能同时包含“USB”和“nut-”,因此被写入两次nut.log,那么您需要使用更复杂的语法。

旧语法已被替换为雷纳脚本很久以前。这意味着你可以编写如下过滤器:

if ($msg contains "USB" or $msg contains "nut-") then {
   action(type="omfile" file="/var/log/nut.log")
}

这并不需要阻止消息的进一步处理。

相关内容