推荐频率与保留策略

-
生产环境里,一个通用且稳妥的做法是“按天轮转 + 保留7–10天 + 压缩归档”。既能保证回溯需求,又不会让硬盘吃紧。下面这张表格可以直接拿去用:
场景 轮转频率 保留份数 压缩 典型用途 PHP-FPM 错误/访问日志 daily 7–10 compress 日常运行、问题排查 PHP 错误日志(php.ini) daily 7 compress 应用错误记录 高流量或严格合规 daily 14–30 compress 合规审计、深度排查 几点说明:
- 按天轮转能稳定控制单日日志体量,定位问题时段也方便。
- 保留7–10天基本覆盖大多数故障复盘周期;如果流量大或有合规要求,延长到14–30天也合理。
- 压缩能省不少空间,旧日志通过
zcat或zgrep查看即可。
logrotate 配置示例
-
PHP-FPM 日志(
/etc/logrotate.d/php-fpm)/var/log/php-fpm*.log { daily rotate 10 compress missingok notifempty create 0640 root adm postrotate /usr/sbin/php-fpm -k >/dev/null 2>&1 || true endscript } -
PHP 错误日志(
/etc/logrotate.d/php-errors)/var/log/php_errors.log { daily rotate 7 compress missingok notifempty create 0640 root adm } -
关键点:
daily + rotate N + compress这套组合拳,直接控制体量和保留周期。postrotate里给 PHP-FPM 发信号,让它重新打开日志文件——否则句柄还占着旧文件,轮转就白做了。- 保留份数可以按需调,比如从7改成10。
按大小触发与监控
-
如果更关注单文件不要太大,换成“按大小轮转”也行。比如单个文件超过100MB就轮,保留7份并压缩:
/var/log/php-fpm.log { size 100M rotate 7 compress missingok notifempty create 0640 root adm postrotate /usr/sbin/php-fpm -k >/dev/null 2>&1 || true endscript } -
建议同时配上监控和告警(比如磁盘使用率、日志增长速率),再用
logwatch做日常摘要分析,能提前发现异常输出。
清理与执行方式
- logrotate 本身跟着系统的定时任务跑,每天自动完成轮转和清理,不需要额外写删除脚本。如果想立刻手动触发,运行:
logrotate -f /etc/logrotate.d/php-fpm - 如果确有自定义清理需求(比如删掉历史归档),可以用 cron 删掉超过 N 天的已轮转压缩文件。下面这个例子删除 30 天前的
.gz归档:
注意:只在确认不再需要历史归档时才执行删除,别影响审计和复盘。0 2 * * * find /var/log/php-fpm*.gz -mtime +30 -delete