在PHP中,日志轮转通常是通过配置Web服务器(如Apache或Nginx)或PHP-FPM来实现的。以下是针对这两种情况的日志轮转设置方法:
找到Apache配置文件:
httpd.conf
或apache2.conf
。find / -name httpd.conf
或find / -name apache2.conf
来查找。编辑配置文件:
ErrorLog
和CustomLog
指令。rotatelogs
工具来设置日志轮转。ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log.%Y-%m-%d 86400"
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y-%m-%d 86400" combined
这里的86400
表示每天轮转一次日志(86400秒 = 1天)。
重启Apache:
sudo systemctl restart apache2
找到Nginx配置文件:
nginx.conf
。find / -name nginx.conf
来查找。编辑配置文件:
error_log
和access_log
指令。rotatelogs
工具来设置日志轮转。error_log /var/log/nginx/error.log main buffer=32k flush=300s;
access_log /var/log/nginx/access.log main buffer=32k flush=300s;
这里的flush=300s
表示每300秒(5分钟)刷新一次日志。
找到PHP-FPM配置文件:
www.conf
或php-fpm.conf
。find / -name www.conf
或find / -name php-fpm.conf
来查找。编辑配置文件:
error_log
指令。rotatelogs
工具来设置日志轮转。error_log = /var/log/php-fpm/error.log
然后在启动PHP-FPM时使用rotatelogs
:
php-fpm --nodaemonize --fpm-config /etc/php/7.x/fpm/pool.d/www.conf --error-log /var/log/php-fpm/error.log --log-level alert
你可以使用cron
任务来定期重启PHP-FPM以应用新的日志轮转设置。
如果你不想在配置文件中直接使用rotatelogs
,可以使用cron
任务来定期压缩和删除旧日志文件。
创建一个脚本:
#!/bin/bash
LOG_DIR="/var/log/php"
LOG_FILE="access.log"
MAX_LOGS=7
cd $LOG_DIR
gzip $LOG_FILE
ls -t $LOG_FILE* | tail -n +$((MAX_LOGS + 1)) | xargs rm -f
设置Cron任务:
crontab -e
添加以下行来每天凌晨1点执行脚本:
0 1 * * * /path/to/your/script.sh
通过以上方法,你可以有效地管理PHP日志文件,避免日志文件过大导致的问题。