在Laravel 5.7升级后使用configureMonologUsing - Supervisor Logging Permission
在Laravel 5.7升级后使用configureMonologUsing - Supervisor Logging Permission
我正在尝试将我的Laravel 5.5项目升级到5.7版本。我使用supervisor,在5.6版本中,我使用了configureMonologUsing()
来生成日志,但显然该方法在5.6版本中已经弃用。在L5.5中,我的完整代码如下:在bootstrap/app.php中:
$app->configureMonologUsing( function( Monolog\Logger $monolog) { $processUser = posix_getpwuid( posix_geteuid() ); $processName= $processUser[ 'name' ]; $filename = storage_path( 'logs/laravel-' . php_sapi_name() . '-' . $processName . '.log' ); $handler = new Monolog\Handler\RotatingFileHandler( $filename ); $monolog->pushHandler( $handler ); });
这样可以生成各种日志记录器(非常方便):
- laravel-cli-root-{日期},
- laravel-cli-ubuntu-{日期},
- laravel-cli-www-data-{日期},
- laravel-fpm-fcgi-www-data-{日期},等等...
然而,在升级指南中指出,我不能再使用configureMonologUsing
:
configureMonologUsing
方法如果您使用
configureMonologUsing
方法来自定义应用程序的Monolog实例,您现在应该创建一个自定义的日志通道。有关如何创建自定义通道的更多信息,请查看完整的日志记录文档。
我无法弄清如何使用日志通道实现相同的功能。我如何利用Monolog通道来写入laravel/storage/logs文件夹?
自 Laravel 5.6.10 版本以后,配置文件 `config/logging.php` 中的 `single` 和 `daily` 驱动器增加了 `permission` 元素:
'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 7, 'permission' => 0664, // this line lets the file owner to be www-data:www-data ],
不再需要在引导脚本中处理 Monolog。
具体来说,这个支持是在以下提交中添加的:https://github.com/laravel/framework/commit/4d31633dca9594c9121afbbaa0190210de28fed8。
然而,在 Laravel 5.7 升级后,一些用户遇到了一个问题。在升级后,他们的应用程序无法使用 Supervisor 记录日志,出现了权限问题。在研究后,用户发现是因为 Laravel 5.7 默认的日志文件权限是 0644,Supervisor 进程无法写入这个文件。
为了解决这个问题,用户可以修改 `config/logging.php` 文件中的 `permission` 值为 0664。这样可以确保日志文件的所有者是 `www-data:www-data`,Supervisor 进程可以正确写入日志文件。
总结起来,问题的原因是 Laravel 5.7 默认的日志文件权限问题,解决方法是修改配置文件中的 `permission` 值为 0664。