Ubuntu PHP日志清理策略
一 定位日志来源与路径
- 先明确日志来自哪里:PHP 引擎、Web 服务器(Apache/Nginx)还是应用框架,避免误删或漏管。
- 常见路径与查看方式如下:
| 组件 |
常见日志路径 |
快速查看命令 |
| PHP 引擎错误日志 |
由 php.ini 的 error_log 指定,如 /var/log/php_errors.log 或 /var/log/php/7.x/fpm/error.log |
sudo tail -f /var/log/php_errors.log |
| Apache |
/var/log/apache2/error.log、/var/log/apache2/access.log |
sudo tail -f /var/log/apache2/error.log |
| Nginx |
/var/log/nginx/error.log、/var/log/nginx/access.log |
sudo tail -f /var/log/nginx/error.log |
| PHP-FPM |
/var/log/php-fpm.log 或 /var/log/php/7.x/fpm/error.log(按版本号区分) |
sudo tail -f /var/log/php-fpm.log |
- 如何确认 php.ini 的 error_log:在对应 /etc/php/版本号/apache2/php.ini 或 /etc/php/版本号/fpm/php.ini 中查找 error_log 指令。
二 推荐的清理策略
- 使用 logrotate 做按日轮转、压缩与保留(首选方案)
- 优点:安全、可自动、可压缩、可保留历史、可配合信号让进程重新打开日志文件。
- 建议策略:按日轮转、保留 7–14 天、压缩旧日志、空文件不轮转、轮转后通知进程重开日志。
- 降低日志噪声
- 调整 php.ini 的 error_reporting,减少 E_NOTICE/E_WARNING/E_DEPRECATED 等非关键日志。
- 调整应用框架(如 Laravel/Symfony)日志级别,生产环境用 warning/error。
- 清理应用自定义日志
- 规范应用日志目录,结合 logrotate 或脚本定期清理超过 N 天 的归档。
- 监控与告警
- 对 /var/log 或日志目录设置磁盘使用率监控与阈值告警,提前发现异常增长。
三 落地配置示例
- PHP-FPM 日志轮转(/etc/logrotate.d/php-fpm)
- 适配路径示例:/var/log/php-fpm.log 或 /var/log/php/7.4/fpm/error.log
- 配置要点:按日轮转、保留 7 天、压缩、空文件不轮转、轮转后向 PHP-FPM 主进程发送 USR2 信号以重新打开日志文件。
/var/log/php*.log /var/log/php/*/fpm*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
# 按实际版本和进程名调整
for pid in /run/php/php*.pid; do
if [ -f "$pid" ]; then
kill -USR2 "$(cat "$pid")"
fi
done
endscript
}
- 应用自定义 PHP 日志(/etc/logrotate.d/php-app)
- 适配路径示例:/var/www/app/storage/logs/laravel.log
- 配置要点:按日轮转、保留 14 天、压缩、空文件不轮转。
/var/www/*/storage/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0644 www-data www-data
copytruncate
}
- 测试与生效
- 语法/执行计划检查:sudo logrotate -d /etc/logrotate.conf
- 强制执行一次:sudo logrotate -f /etc/logrotate.d/php-fpm
- 说明:多数系统已预装 logrotate;如未安装可执行 sudo apt-get install logrotate。
四 安全清理与应急操作
- 优先使用 logrotate 而不是直接删除或清空正在写入的日志文件;若必须立即释放空间,可“清空”而非“删除”:
- 清空文件:sudo truncate -s 0 /var/log/php-fpm.log
- 删除并重建(需确保进程不再持有文件句柄):sudo rm /var/log/php-fpm.log && sudo touch /var/log/php-fpm.log && sudo chown/chmod 正确
- 操作前备份关键日志;谨慎使用 rm -rf;变更 php.ini 或 FPM 池配置 后需重启或重载服务以使 error_log 等生效。
五 监控与容量规划
- 建立目录容量阈值告警(如 80%),并定期审计日志增长趋势。
- 对历史归档设置生命周期管理:如保留 7–14 天 的压缩归档,超过阈值的批量清理。
- 在异常增长时,联动排查:错误级别配置、异常堆栈、第三方组件日志开关、近期部署变更等。