Appearance
日志轮转
日志轮转可以防止日志文件过大,方便日志管理。
基本配置
使用logrotate
bash
sudo vi /etc/logrotate.d/nginx添加以下内容:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}参数说明
daily
- 每天轮转日志
missingok
- 如果日志文件不存在,不报错
rotate 14
- 保留14天的日志
compress
- 压缩旧日志
delaycompress
- 延迟压缩,保留最近一个未压缩的日志
notifempty
- 如果日志文件为空,不轮转
create 0640 www-data adm
- 创建新日志文件,权限0640,所有者www-data,组adm
sharedscripts
- 所有日志共享postrotate脚本
postrotate
- 轮转后执行的脚本
完整配置
生产环境配置
bash
sudo vi /etc/logrotate.d/nginx添加以下内容:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}手动轮转
测试轮转
bash
sudo logrotate -d /etc/logrotate.d/nginx强制轮转
bash
sudo logrotate -f /etc/logrotate.d/nginx自定义轮转策略
按大小轮转
bash
/var/log/nginx/*.log {
size 100M
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}按周轮转
bash
/var/log/nginx/*.log {
weekly
rotate 4
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}按月轮转
bash
/var/log/nginx/*.log {
monthly
rotate 12
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}日志清理
清理旧日志
bash
find /var/log/nginx -name "*.gz" -mtime +30 -delete清理所有旧日志
bash
find /var/log/nginx -name "*.gz" -delete常见问题
日志未轮转
原因: logrotate配置错误
解决: 检查logrotate配置
bash
sudo logrotate -d /etc/logrotate.d/nginx日志未压缩
原因: compress未启用
解决: 启用compress
bash
/var/log/nginx/*.log {
compress
...
}总结
日志轮转的关键点:
- logrotate:使用logrotate工具
- 轮转策略:按时间或大小轮转
- 压缩:压缩旧日志节省空间
- 保留天数:设置合理的保留天数
- 手动轮转:测试和强制轮转
合理配置日志轮转,防止日志文件过大,方便日志管理。