在Laravel 5.7升级后使用configureMonologUsing - Supervisor Logging Permission

10 浏览
0 Comments

在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文件夹?

0
0 Comments

自 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。

0