在 Ubuntu 上“分割 PHP 日志”通常有两种常见场景:
/var/log/php-fpm.log 或 /var/log/php7.x-fpm.log)error_log())下面按最常见、最推荐的方式说明。
Ubuntu 默认带 logrotate,适合所有 PHP 日志文件。
例如 PHP-FPM 日志:
sudo nano /etc/logrotate.d/php-fpm
内容示例(PHP 7.4):
/var/log/php7.4-fpm.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload php7.4-fpm > /dev/null 2>&1 || true
endscript
}
如果是自定义 PHP 日志:
/var/www/html/storage/logs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
copytruncate
}
✅
copytruncate适合不能重启的 PHP 进程
sudo logrotate -d /etc/logrotate.d/php-fpm
正式执行:
sudo logrotate -f /etc/logrotate.d/php-fpm
PHP-FPM 本身不支持自动分割日志,只能:
catch_workers_outputerror_log 指向文件.env:
LOG_CHANNEL=daily
生成:
storage/logs/laravel-2026-01-21.log
自动按天分割 ✅
'log' => [
'type' => 'daily',
'max_files' => 30
]
logrotate 示例:
size 100M
rotate 5
❌ PHP 进程一直写旧文件(不重启)
✅ 用 copytruncate
❌ 权限不对
✅ chown www-data:adm
❌ 日志不生成
✅ 检查 php.ini:
log_errors = On
error_log = /var/log/php_errors.log
| 场景 | 方法 |
|---|---|
| PHP-FPM 日志 | logrotate |
| 应用日志 | 框架 daily 日志 |
| 自定义日志 | logrotate + copytruncate |
如果你能告诉我:
我可以给你完全定制的配置。