Ubuntu rsyslog stop命令复制消息,而不是移动消息

Ubuntu rsyslog stop命令复制消息,而不是移动消息,ubuntu,rsyslog,Ubuntu,Rsyslog,在带有rsyslogd8.32.0的Ubuntu 18.04上 为了从名为“mqtt433”的服务中移动日志条目,我在/etc/rsyslog.d/50-default.conf中添加了以下内容: if $programname == 'mqtt433' then { action(type="omfile" File="/var/log/mqtt433_log.log") stop } 它将创建文件/var/log/mqtt433_lo

在带有rsyslogd8.32.0的Ubuntu 18.04上

为了从名为“mqtt433”的服务中移动日志条目,我在/etc/rsyslog.d/50-default.conf中添加了以下内容:

if $programname == 'mqtt433' then {
    action(type="omfile" File="/var/log/mqtt433_log.log")
    stop
}
它将创建文件/var/log/mqtt433_log.log,并按预期将来自服务的日志消息附加到该文件。根据我的理解,它不应该在默认文件(/var/log/syslog)中保留行,而应该保留行

换句话说,它应该将消息移动到新文件中,而不是复制它们

我还尝试了旧的规则语法,得到了相同的结果

:programname, isequal, "mqtt433" /var/log/mqtt433.log
& stop
我也尝试过不推荐的语法

& ~
而不是

& stop
没有运气


我做错了什么?

确保在读取任何其他规则之前先读取您的conf文件。例如,检查目录
/etc/rsyslog.d/
中没有以前的文件,并且
rsyslog.conf
$IncludeConfig/etc/rsyslog.d/*.conf
行之前的
中没有过滤规则,该行包含了此时的配置。通常,规则放在
#####
注释之后,并按它们出现的顺序执行。

确保在读取任何其他规则之前先读取您的conf文件。例如检查
/etc/rsyslog.d/
中没有早期文件,在
$IncludeConfig/etc/rsyslog.d/*.conf
line.OMG之前的
rsyslog.conf
中也没有过滤规则!我把这些行移到配置文件的开头,它就可以工作了!不知道我读了多少天rsyslog文档,一直在寻找解决方案。请把你的评论作为一个答案,这样我可以标记它!只是想澄清一下,以帮助未来的读者:默认情况下,在Ubuntu 18.04上,/etc/rsyslog.conf包含
$IncludeConfig/etc/rsyslog.d/*.conf
,只有一个名为
/etc/rsyslog.d/50 default.conf
的配置文件;auth,authpriv.none-/var/log/syslog
文件第二行的规则。因此,尽管没有像
######
注释之类的视觉线索,但在
*.
过滤器后面放置任何
停止
命令都不会起任何作用。在我的例子中,将自定义规则文件重命名为在
50 default.conf
文件
01-mqtt433.conf
之前读取。