温馨提示×

如何分割ubuntu php日志

小樊
39
2026-10-21 00:37:17
栏目: 编程语言

在 Ubuntu 上“分割 PHP 日志”通常有两种常见场景:

  1. PHP-FPM 日志(如 /var/log/php-fpm.log 或 /var/log/php7.x-fpm.log)
  2. PHP 应用自己写的日志(如 Laravel、ThinkPHP、自定义 error_log())

下面按最常见、最推荐的方式说明。


一、使用 logrotate(系统级,最推荐)

Ubuntu 默认带 logrotate,适合所有 PHP 日志文件。

1. 创建 logrotate 配置

例如 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 进程


2. 手动测试

sudo logrotate -d /etc/logrotate.d/php-fpm

正式执行:

sudo logrotate -f /etc/logrotate.d/php-fpm

二、PHP-FPM 自带日志分割(不常用)

PHP-FPM 本身不支持自动分割日志,只能:

  • 关掉 catch_workers_output
  • 使用 error_log 指向文件
  • 配合 logrotate

三、应用层日志分割(Laravel / ThinkPHP)

Laravel 示例(推荐)

.env:

LOG_CHANNEL=daily

生成:

storage/logs/laravel-2026-01-21.log

自动按天分割 ✅


ThinkPHP

'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

如果你能告诉我:

  • PHP 版本
  • 日志路径
  • 是 FPM 还是 CLI / 框架

我可以给你完全定制的配置。

0 踩