rsyslog日志级别通过facility+priority组合控制,而非level=xxx;优先级从高到低为emerg、alert、crit、err、warning、notice、info、debug;可用*.warning等规则限制输出级别,修改后需重启rsyslog服务。

Linux系统中rsyslog的日志级别不是直接在配置文件里用“level=xxx”设置的,而是通过日志设施(facility)+ 优先级(priority)组合来过滤和路由日志。调整的关键在于修改/etc/rsyslog.conf或/etc/rsyslog.d/*.conf中的规则行,控制哪些日志被记录、写入何处、是否转发。
理解日志优先级(priority)与匹配逻辑
rsyslog支持8个标准优先级,从高到低依次为:emerg、alert、crit、err、warning、notice、info、debug。规则中常用的是“>=”、“==”、“.*”等操作符:
-
*.info表示所有facility的info及以上级别(即info、notice、warning、err…) -
mail.*表示mail facility的所有级别日志 -
authpriv.=info表示authpriv facility的恰好info级别(不包含notice或debug) -
daemon.!info表示daemon facility中排除info级别(即只记录其他级别)
调整本地日志输出级别(例如限制/var/log/messages只存warn以上)
编辑/etc/rsyslog.d/50-default.conf(或主配置中对应规则),找到类似这一行:
*.*;auth,authpriv.none -/var/log/syslog
若只想让/var/log/messages保存warning及以上日志,可改为:
*.warning;auth,authpriv.none -/var/log/messages
注意:该行末尾的-表示异步写入(提升性能),保留即可。改完后需重启服务生效:
sudo systemctl restart rsyslog
限制特定程序或服务的日志量(如减少sshd调试日志)
如果某服务(如sshd)开启了debug日志导致/var/log/auth.log暴增,可在rsyslog配置中单独拦截:
- 新建
/etc/rsyslog.d/20-sshd-limit.conf - 加入规则:if $programname == 'sshd' and $syslogseverity (6=info,即只记录info及更严重级别)
- 再加一行:if $programname == 'sshd' and $syslogseverity (防止日志被后续规则重复处理)
这样既保留必要日志,又避免debug刷屏。记得测试语法:sudo rsyslogd -N1,无报错再重启。
验证与排查技巧
调整后建议立即验证效果:
- 用
logger -p daemon.info "test info"和logger -p daemon.debug "test debug"分别发两条日志 - 检查目标文件(如
/var/log/messages)是否只收到info那条 - 查看rsyslog运行状态:
sudo systemctl status rsyslog,留意是否有“invalid selector”类错误 - 开启rsyslog调试日志(临时):
sudo rsyslogd -dn 2>&1 | grep -i "filter\|rule",可直观看到每条日志匹配了哪条规则
不复杂但容易忽略的是:rsyslog按配置文件顺序逐行匹配,stop语句会终止后续处理,合理使用能精准控流。










