我们知道 Laravel 中日志系统的 daily 驱动是新创建一个文件,且是以日期来命名文件的。所以第一次创建日志的用户就显得尤为重要,如果文件创建的 OnwerGroup 不对,其他的用户触发写入日志文件就会失败。

Laravel 中有多少种不同的用户可能创建日志文件:

  • Crontab 中执行的定时任务,跟创建 Crontab 的用户有关,此时创建的日志文件 OwnerGroup 值分别是该用户以及默认的 Group
  • 一些常驻的后台进程,比如 Laravel 中的 queue work,此时创建的日志文件 OwnerGroup 值分别是执行该进程的用户以及所属的默认 Group
  • 正常用户访问网站产生的日志文件,此时创建的日志文件的 OwnerGroup 都是 web 服务器默认的用户。

解决方法:

  1. 指定 www 用户执行 crontab

    sudo crontab -u www -e

  2. Laravel 中修改创建日志文件的权限:

    修改 config/logging.php 文件:

    1
    2
    3
    4
    5
    6
    7
    'daily' => [
    'driver' => 'daily',
    'path' => storage_path('logs/laravel.log'),
    'level' => 'debug',
    'days' => 14,
    'permission' => 0664 // 此处是添加的文件权限
    ],