linux日志过滤的核心是通过rsyslog的if-then-stop规则精准屏蔽冗余日志,如按$programname、$msg、$syslogseverity-text等条件匹配后重定向至/dev/null并stop,规则应置于/etc/rsyslog.d/独立.conf文件中,前置避免被通用规则覆盖,修改后需重启服务并用-n1验证语法。

Linux 日志过滤的核心目标之一,就是减少干扰、聚焦关键信息。屏蔽冗余日志不是简单地“删掉”,而是通过规则让系统跳过记录或丢弃不必要内容,从而降低磁盘占用、提升排查效率、避免日志轮转过快。
用 rsyslog 的 if-then-stop 规则精准拦截
rsyslog 支持基于属性的条件判断,这是屏蔽冗余最常用也最灵活的方式。关键在于把“不想留下的日志”明确识别出来,再用 & stop 终止后续处理。
-
$programname匹配进程名:比如if $programname == 'dhclient' then /dev/null & stop可屏蔽 DHCP 客户端的频繁续约日志 -
$msg匹配日志正文:if $msg contains 'IPv6 disabled' then /dev/null & stop能过滤内核打印的重复提示 -
$syslogfacility-text或$syslogseverity-text用于按类别或级别拦截:例如if $syslogseverity-text == 'debug' and $programname == 'sshd' then /dev/null & stop只屏蔽 SSH 的 debug 级别日志 -
$fromhost-ip适用于集中式日志场景:if $fromhost-ip == '10.0.0.254' then /dev/null & stop可忽略某台网络设备发来的状态心跳
所有这类规则建议放在 /etc/rsyslog.d/ 下的独立文件(如 99-block-verbose.conf),便于管理与复用。
利用传统选择器语法简化高频屏蔽
对设施(facility)和优先级(priority)组合的批量屏蔽,仍可用经典语法,更轻量直接:
- 屏蔽全部
cron的 info 级别及以下:cron.info /dev/null - 忽略
daemon的 debug 和 info:daemon.debug /dev/null和daemon.info /dev/null - 注意顺序:规则靠前的先匹配,所以把屏蔽规则放在通用规则(如
*.info)之前,否则会被提前写入
避免误伤:屏蔽前先验证匹配效果
直接写入 /dev/null 前,建议先临时重定向到测试文件,确认只捕获目标内容:
if $programname == 'avahi-daemon' then /var/log/avahi-test.log & stop
用 logger -t avahi-daemon "test message" 手动触发,再检查文件内容是否符合预期。确认无误后再改 /dev/null。
注意权限与重启生效
修改配置后必须执行 sudo systemctl restart rsyslog;若服务启动失败,运行 sudo rsyslogd -N1 可快速定位语法错误。确保 /etc/rsyslog.d/ 中文件名以 .conf 结尾,且无重复或冲突规则。
不复杂但容易忽略











