如何从 /var/log/syslog(rsyslog.conf/Debian)中过滤 mail.info 同时保留大于或等于 mail.warn 的消息?
我已经尝试了几乎所有不同的附加和前置组合mail, mail.info, mail.!info, mail.*, mail.warn, mail.!warn
,但显然文档比我聪明。
目前我正处于这个阶段,但是可惜的是,她不行:
*.*;auth,authpriv.none;mail.warn,mail.!info -/var/log/syslog
编辑:我真的很难理解分号分隔符以及它如何“限制”先前的条目。
答案1
来自man rsyslog.conf
页:
Rsyslogd 对原始 BSD 源代码进行了语法扩展,使其使用起来更加直观。您可以在每个优先级前面加上等号 (
=
),以仅指定此单个优先级,而不指定上述任何优先级。您还可以(两种方法都有效)在优先级前面加上感叹号 (!
),以忽略所有优先级,无论是精确指定此优先级还是此优先级和任何更高优先级。如果您同时使用两个扩展,则感叹号必须出现在等号之前,只需直观地使用它即可。
所以mail.!info
意味着你忽略了info
优先级和任何更高的优先级。试试这个:
*.*;auth,authpriv.none;mail.warn,mail.!=info -/var/log/syslog
答案2
我发现,quanta 的答案还有其他几种变体,它们似乎也有效。我知道它们为什么有效,但我对 rsyslog.conf 的分隔符和运算符不够有信心,无法肯定地说。希望它们能帮助别人。
一。
*.*;\
auth,authpriv.none;\
mail.!info,mail.warn -/var/log/syslog
二。
*.*;\
mail.none;\
mail.error;\
auth,authpriv.none -/var/log/syslog
欢迎更了解情况的人对此发表评论。