无法在Laravel中将日志通道设置为null

xmjla07d  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(162)

我使用三个环境文件进行测试-.env.testing用于单元/功能测试,.env.dusk.local用于本地Dusk测试,.env.dusk.testing用于CI/CD Dusk测试。我试图将所有这些的日志通道设置为null,因为我根本不需要测试来记录任何东西。
当我将这些文件中的日志变量替换为:

LOG_CHANNEL=null

字符串
.并尝试运行黄昏测试,我得到以下在我的日志:

[2023-10-26 18:38:28] laravel.EMERGENCY: Unable to create configured logger. Using emergency logger. {"exception":"[object] (InvalidArgumentException(code: 0): Log [] is not defined. at D:\\Path\\To\\Site\\mysite\\vendor\\laravel\\framework\\src\\Illuminate\\Log\\LogManager.php:210)
[stacktrace]
...


根据文档,我知道这是可能的,并且我已经确认在logging.php中设置了以下内容:

'null' => [
    'driver' => 'monolog',
    'handler' => NullHandler::class,
],


我还运行了php artisan optimize:clear来排除配置缓存。为了它的价值,我最近确实使用了Laravel Shift升级到Laravel 9,以防这是一个依赖或版本特定的问题。

z3yyvxxp

z3yyvxxp1#

Laravel并不把每个环境变量都看作字符串,有一些特殊的关键字会被转换成其他类型。在你的例子中,null似乎在Laravel中被有效地转换成了null值。
尝试将您的频道名称更改为其他名称(例如nullable):

// in environment files use LOG_CHANNEL=nullable

'nullable' => [
    'driver' => 'monolog',
    'handler' => NullHandler::class,
],

字符串
或者,您也可以尝试在环境文件中将null括在双引号内:

LOG_CHANNEL="null"


参考:https://laravel.com/docs/10.x/configuration#environment-variable-types
另一个解决方案,也似乎没有很好的文档,是像这样使用null驱动程序:

'nullable' => [
    'driver' => 'null',
    'handler' => NullHandler::class, // probably not needed
],

dxxyhpgq

dxxyhpgq2#

Alberto的解决方案是这里要走的路,但我不建议重命名主null logger,以防它破坏其他依赖它的东西-相反,我最终在logging.php中创建了一个自定义logger,它也使用了Monolog的Nulllogger:

'null' => [
        'driver' => 'monolog',
        'handler' => NullHandler::class,
    ],

    # Add this
    'silent' => [
        'driver' => 'monolog',
        'handler' => NullHandler::class,
    ],

字符串
然后在我的环境文件中使用新的logger:

LOG_CHANNEL=silent

相关问题