rsyslog日志级别可通过修改配置文件中的facility.level规则、为特定服务创建独立配置片段,或基于$syslogseverity字段动态筛选来调整。

如果您在Linux系统中使用rsyslog服务,但发现日志输出过于冗长或关键信息被淹没,则可能是由于rsyslog的日志级别未按需调整。以下是针对rsyslog配置日志级别的具体操作步骤:
一、修改rsyslog主配置文件中的全局日志级别
rsyslog默认通过/etc/rsyslog.conf或/etc/rsyslog.d/下的配置文件控制日志行为,其中日志级别由规则行中的facility.level语法决定,而非单一全局变量;但可通过调整规则匹配的level来实现效果等效的“全局过滤”。
1、使用root权限打开主配置文件:sudo nano /etc/rsyslog.conf。
2、查找包含auth,authpriv.*、*.info、mail.*等典型规则的行。
3、将目标规则中的info替换为所需级别,例如改为notice以排除debug与info级消息:*.notice /var/log/messages。
4、保存文件并退出编辑器。
5、重启rsyslog服务使配置生效:sudo systemctl restart rsyslog。
二、为特定服务单独设置日志级别
当仅需限制某类应用(如sshd、cron)的日志详细程度时,可在/etc/rsyslog.d/下创建独立配置片段,利用rsyslog的模块化特性实现精准控制。
1、新建专用配置文件:sudo nano /etc/rsyslog.d/50-sshd-level.conf。
2、写入以下内容以仅记录sshd的warning及以上级别日志:if $programname == 'sshd' then /var/log/sshd.log。
3、在下一行添加过滤条件:& stop,阻止该程序日志继续匹配后续规则。
4、为新日志文件设置权限:sudo touch /var/log/sshd.log && sudo chown syslog:adm /var/log/sshd.log。
5、重启rsyslog服务:sudo systemctl restart rsyslog。
三、使用rsyslog内置属性进行动态级别筛选
rsyslog支持基于$syslogseverity字段进行条件判断,可在运行时根据原始日志的数值severity值决定是否写入,从而实现比facility.level更细粒度的控制。
1、确认当前日志的severity数值映射关系:debug=7、info=6、notice=5、warning=4、err=3、crit=2、alert=1、emerg=0。
2、编辑/etc/rsyslog.d/60-dynamic-filter.conf文件,添加如下规则:if $syslogseverity 。
3、确保该规则位于其他通用规则之前,以避免提前匹配。
4、创建目标日志文件并授权:sudo touch /var/log/warnings-and-above.log && sudo chmod 640 /var/log/warnings-and-above.log。
5、重新加载配置:sudo systemctl reload rsyslog。
四、通过imjournal模块限制systemd journal输入的日志级别
若系统启用journald且rsyslog通过imjournal模块读取日志,则实际日志级别受journal本身限制影响,需同步调整journal配置以避免rsyslog收到过量低级别日志。
1、编辑journal配置文件:sudo nano /etc/systemd/journald.conf。
2、取消注释并修改MaxLevelStore=行,设为所需最低保留级别,例如:MaxLevelStore=warning。
3、同样可设置MaxLevelSyslog=限制转发给rsyslog的上限:MaxLevelSyslog=notice。
4、重启journald服务:sudo systemctl restart systemd-journald。
5、重启rsyslog确保imjournal重新连接:sudo systemctl restart rsyslog。
五、验证日志级别是否生效
配置变更后需通过生成测试日志并检查输出内容,确认指定级别及以下的消息是否被正确过滤或路由,避免误配导致关键日志丢失。
1、手动触发info级日志:logger -p user.info "This is an info test message"。
2、手动触发warning级日志:logger -p user.warning "This is a warning test message"。
3、查看目标日志文件内容:sudo tail -n 5 /var/log/messages 或对应路径。
4、使用journalctl检查原始journal条目:journalctl -n 10 -p warning。
5、比对rsyslog输出与journal原始级别,确认过滤逻辑符合预期。

















