You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel测试环境设置LOG_CHANNEL=null报错问题排查

解决Laravel测试环境设置LOG_CHANNEL=null时报错的问题

问题重现

配置了三个测试环境.env文件:

  • .env.testing:单元/功能测试
  • .env.dusk.local:本地Dusk测试
  • .env.dusk.testing:CI/CD Dusk测试

为避免测试生成日志,将这些文件中的日志变量设置为:

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]
...

已在config/logging.php中配置null通道:

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

且执行过php artisan optimize:clear清除配置缓存,近期通过Laravel Shift升级到Laravel 9。

问题原因

当在.env文件中直接写LOG_CHANNEL=null时,Laravel会将其解析为空字符串,而非字符串"null",导致LogManager无法找到对应的日志通道配置,从而抛出"Log [] is not defined"的错误。

解决方案

方案1:将环境变量值用引号包裹

修改.env测试文件中的配置为:

LOG_CHANNEL="null"

这样Laravel会正确识别该值为字符串"null",匹配你在config/logging.php中定义的null通道。

方案2:直接在测试环境配置文件中硬编码

如果不想依赖.env变量,可以在测试环境的日志配置文件中直接指定默认通道。比如创建config/env/testing/logging.php(Laravel 9支持环境专属配置目录),内容如下:

<?php

use Monolog\Handler\NullHandler;

return [
    'default' => 'null',

    'channels' => [
        'null' => [
            'driver' => 'monolog',
            'handler' => NullHandler::class,
        ],
        // 保留其他必要通道配置
    ],
];

方案3:确认NullHandler的引入

检查config/logging.php顶部是否正确引入了NullHandler类:

use Monolog\Handler\NullHandler;

如果缺少这个引入,也会导致无法初始化null通道。

验证步骤

修改配置后,重新执行:

php artisan optimize:clear

然后再次运行Dusk测试,错误应该会消失,测试过程也不会生成日志文件。

内容的提问来源于stack exchange,提问作者Hashim Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:25:06