在 CentOS 上,PHP 本身不会自动分割日志,通常需要借助 logrotate 或 定时任务 + 脚本 来实现。下面按常见场景给你几种做法。
CentOS 默认已安装 logrotate,非常适合管理 PHP 日志。
常见位置:
/var/log/php-fpm/error.log
/var/log/php_errors.log
查看 php.ini:
php --ini
或
grep error_log /etc/php.ini
例如 PHP-FPM 日志:
vi /etc/logrotate.d/php-fpm
内容示例:
/var/log/php-fpm/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www www
sharedscripts
postrotate
systemctl reload php-fpm > /dev/null 2>&1 || true
endscript
}
如果是 CLI 或自定义 PHP 日志:
/var/log/php_errors.log {
weekly
rotate 12
compress
missingok
notifempty
copytruncate
}
logrotate -d /etc/logrotate.d/php-fpm
强制执行:
logrotate -f /etc/logrotate.d/php-fpm
如果你的 PHP 脚本自己写日志(如 file_put_contents):
$logFile = '/var/log/php/cli_' . date('Y-m-d') . '.log';
file_put_contents($logFile, $msg, FILE_APPEND);
或用 cron:
0 0 * * * mv /var/log/php/cli.log /var/log/php/cli_$(date +\%Y\%m\%d).log
/etc/php-fpm.d/www.conf
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www.error.log
每个 pool 一个日志,再用 logrotate 管理。
error_log 路径reloadcopytruncate✅ 最推荐:logrotate + reload php-fpm
✅ CLI 脚本:按日期命名日志
❌ 不建议让 PHP 自己切大文件
如果你愿意,可以告诉我:
我可以给你一份完全可用的配置。