在 Ubuntu 上,PHP 本身不会自动分割日志,通常由 Web 服务器(Nginx / Apache)或日志系统(logrotate) 来负责。下面按常见场景说明。
如果你用的是 PHP-FPM(Ubuntu 默认),日志一般在:
/var/log/php8.1-fpm.log
# 或
/var/log/php-fpm/error.log
sudo nano /etc/logrotate.d/php-fpm
/var/log/php*-fpm.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload php8.1-fpm > /dev/null 2>&1 || true
endscript
}
sudo logrotate -d /etc/logrotate.d/php-fpm
sudo logrotate -f /etc/logrotate.d/php-fpm
Nginx 访问/错误日志:
/var/log/nginx/access.log
/var/log/nginx/error.log
Ubuntu 自带 nginx 的 logrotate:
/etc/logrotate.d/nginx
一般已配置好,按天分割、自动 reload。
如果你是 PHP 自己写日志(error_log()):
error_log('/var/log/php/app.log');
那也要用 logrotate:
/var/log/php/*.log {
daily
rotate 30
compress
missingok
notifempty
}
Apache 默认有:
/etc/logrotate.d/apache2
已支持按天切割,无需额外配置。
PHP 没有内建日志轮转功能,不推荐:
ini_set('error_log') 只能指定文件可用 Monolog(PHP 日志库):
use Monolog\Handler\RotatingFileHandler;
$log = new Logger('app');
$log->pushHandler(new RotatingFileHandler(
'/var/log/php/app.log',
30 // 保留30天
));
| 场景 | 推荐方式 |
|---|---|
| PHP-FPM | logrotate |
| Nginx | logrotate(自带) |
| Apache | logrotate(自带) |
| 应用日志 | Monolog + logrotate |
如果你告诉我:
我可以给你精准配置示例。