Linux中通过rsyslog按级别分流日志需在/etc/rsyslog.d/下建自定义规则文件,用facility.priority语法匹配(如authpriv.err),严格规则须置于宽泛规则之上,并验证语法、重启服务后测试。

Linux 中通过 rsyslog 实现“不同级别日志写入不同文件”,核心在于配置 /etc/rsyslog.d/ 下的自定义规则文件,利用 facility + priority + 输出路径 的组合精确分流。不推荐直接改主配置(/etc/rsyslog.conf),避免升级覆盖或误操作。
明确日志来源与级别含义
每条日志由两部分标识:
-
Facility(设施):表示日志来源,如
authpriv(SSH 登录)、cron(定时任务)、daemon(后台服务)、local0–local7(程序自定义) -
Priority(优先级):数字 0–7,从高到低为
emerg、alert、crit、err、warning、notice、info、debug
配置中用 facility.priority 表示“该设施下 ≥ 某级别的所有日志”。例如 authpriv.warning 表示 authpriv 设施中 warning 及更严重(crit/alert/emerg)的日志。
按级别拆分到不同文件的典型配置
在 /etc/rsyslog.d/10-custom-levels.conf 中写入(可新建):
# 将 authpriv 的警告及以上写入 secure-warn.log authpriv.warning /var/log/authwarn.log <h1>将 authpriv 的错误及以上单独存为 secure-err.log(比 warning 更严格)</h1><p>authpriv.err /var/log/autherr.log</p><h1>将 daemon 的 notice 及以上(含 info、warning、err…)写入 daemon-main.log</h1><p>daemon.notice /var/log/daemon-main.log</p><h1>将 daemon 的 debug 级别单独归档(注意:debug 是最低级,需显式启用)</h1><p>daemon.debug /var/log/daemon-debug.log
⚠️ 注意顺序:rsyslog 自上而下匹配,**更严格的规则要放在更宽泛规则之前**,否则会被提前捕获。比如 authpriv.err 必须写在 authpriv.warning 上方,否则 err 级别已被 warning 规则覆盖。
确保目标目录可写且格式兼容
- 手动创建目标目录并设权限:
sudo mkdir -p /var/log/myapp && sudo chown syslog:syslog /var/log/myapp - 若日志含中文或特殊字符,确认 rsyslog 使用 UTF-8:在
/etc/rsyslog.conf或自定义 conf 文件顶部加一行$DefaultCharset UTF-8 - 避免路径含空格或特殊符号;建议用短横线而非下划线命名文件(如
auth-err.log)
验证与生效
- 语法检查:
sudo rsyslogd -N1(返回 0 表示配置无误) - 重启服务:
sudo systemctl restart rsyslog - 手动触发测试日志:
logger -p authpriv.warning "test warning"和logger -p authpriv.err "test error" - 查看对应文件是否收到内容:
sudo tail -n 2 /var/log/authwarn.log和sudo tail -n 2 /var/log/autherr.log


















