Nginx 日志转储

前言

Nginx 自身并没有日志转储功能,需要由其他程序来完成。这符合 Unix 哲学,专注于一件事并将其做好。

Logrotate 是日志文件管理工具,提供自动转储压缩,删除和邮寄日志文件。 Logrotate 可以设置为每天,每周,每月或当日志文件达到一定大小时处理日志文件。

配置 Logrotate

创建 /etc/logrotate.d/nginx,内容如下

1
2
3
4
5
6
7
8
9
/usr/local/nginx/logs/*.log {
daily
rotate 30
notifempty
sharedscripts
postrotate
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
}

第一行:转储目录 /usr/local/nginx/logs 下全部 .log 后缀的日志文件。
第二行:每天执行。
第三行:最多保留 30 份日志。
第四行:如果日志为空则不执行。
第五行:只执行一次 postrotate 脚本。
第六行:开始 postrotate 脚本声明。postrotate 脚本在转储文件后(压缩文件前)马上执行。
第七行:通知 Nginx 重新打开日志文件。
第八行:结束 postrotate 脚本声明。

测试 Logrotate

执行 logrotate -d /etc/logrotate.d/nginx 测试配置是否正确。

常见问题处理

日志转储没有执行

根据以下步骤定位问题:

  1. 执行 logrotate -d /etc/logrotate.d/nginx 测试配置是否正确。
  2. 检查 /var/log/cron 日志 logrotate 是否有执行。
  3. 检查 cron 守护进程是否正在运行。