我使用三个环境文件进行测试 -.env.testing
用于单元/功能测试、.env.dusk.local
本地 Dusk 测试以及.env.dusk.testing
CI/CD Dusk 测试。我试图将所有这些的日志通道设置为null
,因为我根本不需要测试来记录任何内容。
当我将这些文件中的日志变量替换为:
LOG_CHANNEL=null
...并尝试运行 Dusk 测试,我在日志中收到以下内容:
[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,以防这是依赖项或特定于版本的问题。
Laravel 并不将每个环境变量都视为字符串,有一些特殊的关键字会转换为其他类型。在你的情况下,
null
似乎被有效地转换为null
Laravel 内的值。尝试将您的频道名称更改为其他名称(例如
nullable
):或者您也可以尝试
null
在环境文件中用双引号引起来:参考: https: //laravel.com/docs/10.x/configuration#environment-variable-types
另一个解决方案,这似乎也没有很好的记录,是使用
null
这样的驱动程序: