在系统日志(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
中的$IncludeConfig
or指令出现在大多数标准规则之前,包括将消息写入 的规则。如果您在此文件中的其他规则之后添加规则,那么在匹配并写入 之前,nut 消息就已经被写入。include()
rsyslog.conf
/var/log/syslog
syslog
nut.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")
}
这并不需要阻止消息的进一步处理。