修改 rsyslog 配置需精准控制“对谁、记什么、存哪儿”,优先编辑 /etc/rsyslog.d/ 下的独立配置文件,按 facility.priority target 规则设置日志级别,并用 $programname 等表达式实现进程级精细过滤。

修改 rsyslog 配置文件来自定义日志级别,核心是调整设施(facility)与优先级(priority)的匹配规则,并确保服务重载生效。关键不在于全局开关,而在于“对谁、记什么、存哪儿”的精准控制。
定位并编辑主配置文件
rsyslog 主配置通常位于 /etc/rsyslog.conf,但实际规则可能分散在 /etc/rsyslog.d/*.conf 中(尤其在较新发行版如 Ubuntu 20.04+ 或 RHEL 8+)。建议先检查:
- 运行
ls /etc/rsyslog.d/查看是否有覆盖性配置(如50-default.conf) - 用
grep -v '^#' /etc/rsyslog.conf | grep '\.'快速筛选出有效日志规则行 - 优先编辑
/etc/rsyslog.d/下的独立文件,避免直接改主配置,便于维护
按设施设置不同日志级别
rsyslog 的规则格式为:facility.priority target。facility 是消息来源(如 authpriv、kern、daemon),priority 是最低记录级别(如 info、warning、err)。例如:
-
authpriv.info /var/log/secure:只记录 authpriv 设施中 info 及更严重(warning、err 等)的消息 -
kern.warning /var/log/kern.log:内核消息仅记录 warning 及以上级别 -
daemon.none:完全屏蔽 daemon 设施的所有日志(常用于减少噪音) - 多个条件可用分号分隔:
*.info;mail.none;authpriv.none /var/log/messages
启用调试级或精细过滤
若需更细粒度控制(比如只对某进程调高日志),可结合 rsyslog 的表达式语法:
- 用
$programname匹配进程名:if $programname == 'sshd' then /var/log/sshd.log - 限制级别:
if $programname == 'sshd' and $syslogseverity (4 对应 warning) - 加
& stop终止后续匹配,避免重复记录:if $programname == 'myapp' then /var/log/myapp.log & stop - 注意:表达式功能需 rsyslog v8.16+,旧版本请确认支持情况
保存后必须重启服务
配置变更不会自动生效,必须显式重启服务:
- 执行
sudo systemctl restart rsyslog - 验证是否启动成功:
systemctl status rsyslog(状态应为 active (running)) - 检查语法错误(预防启动失败):
sudo rsyslogd -N1,返回rsyslogd: configuration file /etc/rsyslog.conf checked.即通过 - 测试写入:
logger -p authpriv.info "test message",再查对应日志文件是否出现











