在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日志文件,避免日志文件過大導致的問題。