PHP日志文件如果不加管理,迟早会把磁盘空间撑爆。手动清理、自动轮转、定时脚本、调整日志级别——这四种方法覆盖了从临时应急到长期运维的全部场景。下面逐一拆解,直接上实操。
手动清理PHP日志
这是最直接的办法,适合磁盘告急时临时出手。先得找到日志文件在哪儿。常见路径包括 /var/log/php/、/var/log/php-fpm/(PHP-FPM服务)、/var/log/httpd/(Apache服务)或 /var/log/nginx/(Nginx服务)。如果记不清具体位置,直接用 find 命令全局搜一下所有 .log 后缀的PHP日志文件:
sudo find / -type f -name "*.log" | grep php
找到目标文件后,有两种处理方式:
- 清空内容(保留文件本身):用
truncate命令,例如sudo truncate -s 0 /var/log/php-fpm/error.log。这样文件还在,服务不会受影响。 - 彻底删除旧日志:用
rm命令,例如sudo rm -f /var/log/php/*.log。但注意,删除前最好确认一下文件内容,别误删了有用的日志。

使用logrotate自动轮转日志
手动清理终究不是长久之计。CentOS系统自带的 logrotate 工具就是干这个用的——自动轮转、压缩、删除,让日志文件不再无限膨胀。
- 确认logrotate已安装:CentOS 7及以上版本默认自带。如果没装,CentOS 7用
sudo yum install logrotate,CentOS 8用sudo dnf install logrotate。 - 创建配置文件:在
/etc/logrotate.d/目录下新建一个针对PHP服务的配置文件,比如php-fpm。内容示例如下:
/var/log/php-fpm/*.log {
daily # 每天轮转一次
missingok # 日志文件不存在时不报错
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(节省空间)
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件,权限640,属主root,属组adm
}
如果用的是Apache或Nginx,可以修改对应的 httpd 或 nginx 配置文件,把路径换成PHP日志的实际路径。
- 测试配置是否生效:先用
sudo logrotate -d /etc/logrotate.d/php-fpm模拟轮转,检查配置有没有问题。确认无误后,用sudo logrotate -f /etc/logrotate.d/php-fpm强制执行一次。
定期清理脚本 + 定时任务
如果不想用logrotate,或者需要更灵活的清理策略,可以自己写个Shell脚本,再配合cron定时任务,实现定期自动清理老旧日志(比如30天以上的)。
- 创建清理脚本:比如
/usr/local/bin/clean_php_logs.sh,内容如下:
#!/bin/bash
# 清空PHP-FPM日志
find /var/log/php-fpm/ -type f -name "*.log" -exec truncate -s 0 {} \;
# 删除30天前的Apache错误日志
find /var/log/httpd/ -type f -name "error_log" -mtime +30 -exec rm -f {} \;
# 删除30天前的Nginx错误日志
find /var/log/nginx/ -type f -name "error.log" -mtime +30 -exec rm -f {} \;
- 赋予执行权限:
sudo chmod +x /usr/local/bin/clean_php_logs.sh。 - 设置cron定时任务:编辑crontab文件(
crontab -e),添加以下内容(每天凌晨3点执行):
0 3 * * * /usr/local/bin/clean_php_logs.sh
这样一来,老旧日志就会被自动清理,完全不用手动干预。
调整PHP日志级别,从源头减少日志量
如果日志文件涨得飞快,很可能是因为日志级别设得太低,比如记录了大量的DEBUG信息。这时可以从配置层面下手,提高日志级别,只记录真正有用的信息。
- 编辑PHP-FPM配置文件(比如
/etc/php-fpm.d/www.conf),找到error_log_level参数,把值从debug改成warning或error。这样只有警告级别及以上的日志才会被记录。 - 重启PHP-FPM服务让配置生效:
sudo systemctl restart php-fpm。
这招是从源头上控制日志产量,配合前面的清理策略,效果更佳。