使用local0–local7可彻底分离Nginx、MySQL、PHP-FPM、Docker等日志:local0配Web服务,local1配应用后端,local2配数据库,local3配缓存队列,local4配容器运行时,local5–local7预留;需应用主动发syslog并配置rsyslog路由、轮转与权限。

直接用 local0 到 local7 这 8 个自定义设施,就能把 Nginx、MySQL、PHP-FPM、Docker 容器甚至自研服务的日志彻底分开——不混在 /var/log/messages 里,也不靠应用自己写文件,而是由 rsyslog 统一收、统一分、统一存。
明确每个 local 设施的业务归属
先定规则,避免后期混乱。local0–local7 是纯用户空间,不会和系统设施(如 auth、kern)冲突,推荐这样分配:
- local0:Web 服务(Nginx access/error 日志)
- local1:应用后端(PHP-FPM、Python Flask/Gunicorn)
- local2:数据库(MySQL error log 或慢查询日志)
- local3:缓存与消息队列(Redis、RabbitMQ)
- local4:容器运行时(Docker daemon 日志或关键容器 stdout)
- local5–local7:预留,用于自研服务、安全审计或第三方中间件
让应用日志发到指定 local 设施
应用本身需主动调用 syslog 接口,并传入对应 facility 值。常见方式:
- Nginx:在 nginx.conf 中用 error_log syslog:server=127.0.0.1:514,facility=local0,tag=nginx;(需启用 stream 模块或配合 logger 工具)
- PHP-FPM:修改 www.conf,设 access.log = syslog:local1 和 error_log = syslog:local1
- MySQL:无法原生发 syslog,可用 logger -p local2.err -t mysqld 包装错误输出,或用外部脚本监听错误日志再转发
- Docker:启动容器时加 --log-driver=syslog --log-opt syslog-facility=local4
在 rsyslog 中配置路由与落盘规则
编辑 /etc/rsyslog.d/20-business.conf,添加如下规则:
- local0.* /var/log/web/nginx.log —— 所有 local0 日志进该文件
- local1.warning /var/log/app/php-warning.log —— 仅 warning 及以上级别进警告专用文件
- local1.debug /var/log/app/php-debug.log —— debug 级别单独存放,便于开发排查
- local2.err /var/log/db/mysql-error.log —— 数据库错误集中管理
- local4.* /var/log/container/docker.log —— 容器运行时日志归档
- local0.*;local1.*;local2.* /var/log/business/all.log —— 可选:汇总所有业务日志供快速巡检
每条规则末尾加 & stop 可阻止日志继续匹配后续规则,防止重复写入。
配套管理:轮转 + 权限 + 重启生效
隔离只是第一步,还得可持续维护:
- 为每个新日志路径配置 logrotate,例如 /var/log/web/*.log 单独轮转,保留 30 天、每日切割
- 确保 rsyslog 进程对目标目录有写权限:chown syslog:adm /var/log/web /var/log/app
- 配置完执行 sudo systemctl restart rsyslog,验证是否生效:logger -p local0.info "test from local0",然后 tail -n1 /var/log/web/nginx.log


















