使用Logrotate工具分割PHP日志(Ubuntu系统推荐方法)
Logrotate是Ubuntu系统自带的日志管理工具,可自动分割、压缩、删除旧日志,有效防止PHP日志文件过大占用磁盘空间。以下是具体配置步骤:
大多数Ubuntu版本已预装Logrotate,若未安装,可通过以下命令安装:
sudo apt-get update
sudo apt-get install logrotate
在/etc/logrotate.d/目录下创建专门的PHP配置文件(如php-fpm或php),用于定义日志分割规则:
sudo nano /etc/logrotate.d/php-fpm
在配置文件中添加以下内容(根据实际路径调整,如/var/log/php-fpm/*.log或/var/log/php_errors.log):
/var/log/php-fpm/*.log {
daily # 每天分割一次(可选:weekly/monthly)
missingok # 若日志文件不存在,不报错
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(节省空间)
notifempty # 若日志为空,不进行分割
create 0640 www-data adm # 创建新日志文件,权限640,属主www-data(Apache/Nginx用户),属组adm
sharedscripts # 所有日志处理完成后统一执行postrotate脚本
postrotate # 分割后执行的命令(通知PHP-FPM重新打开日志文件)
if [ -f /var/run/php-fpm/php-fpm.pid ]; then
sudo kill -USR2 `cat /var/run/php-fpm/php-fpm.pid`
fi
endscript
}
参数说明:
daily:分割频率,可根据需求改为weekly(每周)或monthly(每月);rotate 7:保留最近7天的日志,超过的自动删除;compress:使用gzip压缩旧日志(如php_errors.log.1.gz);postrotate:分割后必须执行的操作,用于通知PHP-FPM进程重新打开日志文件(避免日志写入旧文件)。手动触发配置测试,检查是否有语法错误:
sudo logrotate -f /etc/logrotate.d/php-fpm
若无错误输出,说明配置生效。
Logrotate默认通过cron每日自动运行(路径:/etc/cron.daily/logrotate),无需额外配置。
若使用PHP-FPM,需确保其日志路径正确(通常在/etc/php/{version}/fpm/php-fpm.conf或/etc/php/{version}/fpm/pool.d/www.conf中设置):
; 启用错误日志
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /var/log/php-fpm/error.log
; 启用访问日志(可选)
access.log = /var/log/php-fpm/access.log
access.format = "%R - %u %t \"%m %r\" %s %b"
修改后需重启PHP-FPM服务:
sudo systemctl restart php-fpm
若需更灵活的日志管理(如按大小分割、分级存储),可使用Monolog库(PHP常用日志库):
composer require monolog/monolog
use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
$log = new Logger('my_app');
$log->pushHandler(new RotatingFileHandler('/var/log/my_app.log', 7)); // 保留7个日志文件
$log->error('This is an error message.');
此方法适合需要精细化日志管理的应用场景。