laravel 在 Web 访问模式下若报错产生的日志文件(storage/logs)由 www-data
或者 www
用户创建,而在命令行(php artisan)模式下是由当前登录系统用户(例如 root 或者其他小权限用户)创建,laravel 使用的 Monolog 扩展创建日志文件时,不会给予其他用户改写权限。
这两个用户不在同一个组下,就导致后操作的功能无法对日志文件进行写操作。解决这个问题需要修改 Laravel 在使用 Monolog 框架时的源代码。
需要修改的文件在
- vendor/laravel/framework/src/Illuminate/Log/Writer.php
这个文件的第 229 行,如下:
$handler = new RotatingFileHandler($path, $days, $this->parseLevel($level))
改为
$handler = new RotatingFileHandler($path, $days, $this->parseLevel($level),true,0777)
该代码在 useDailyFiles 函数中,因为 config/app.php 中对日志框架的配置是
'log' => 'daily'
所以使用的是 RotatingFileHandler,构造函数中第五个参数是指定创建文件的权限。
当然或许还有更好的解决方案,欢迎大家一起讨论~
🐶 你走,我不送你。你来,风雨无阻,我去接你。