Laravel调用logins日志通道报Unable to create configured logger错误
Laravel自定义日志通道报"Log [logins] is not defined"排查修复方案
按以下顺序逐一排查,大部分场景下前两步就能解决问题:
- 第一步:清理配置缓存
这是该报错最高发的原因,Laravel开启配置缓存后会直接读取缓存文件,不会实时加载config目录下的文件改动,执行以下命令清理缓存:
如果是生产环境,清理后重新生成配置缓存即可:php artisan config:clear php artisan cache:clearphp artisan config:cache - 第二步:验证配置是否被正确加载
执行以下命令查看Laravel实际加载的日志配置,确认输出的channels列表中存在logins键:
如果输出里没有logins配置,检查config/logging.php文件是否存在语法错误(比如括号不匹配、数组键值对少写逗号),确认logins配置是直接放在php artisan config:show loggingchannels数组的一级节点下,没有嵌套到stack或其他通道的配置内部。 - 第三步:检查自定义日志类实现是否符合规范
custom驱动要求via指定的类必须包含__invoke方法,且方法返回Monolog\Logger实例,否则Laravel解析通道失败会抛出通道不存在的错误:- 确认
App\Services\Logging\MongoLogger类文件路径正确,命名空间和类名和配置里写的完全一致,类可以被正常自动加载 - 确认类中存在
__invoke(array $config)方法,方法内正确读取传入的$config参数(配置里的name、database、collection都会以数组形式传入该方法),并返回合法的Monolog实例,参考正确的类结构:
<?php namespace App\Services\Logging; use Monolog\Logger; use Monolog\Handler\MongoDBHandler; class MongoLogger { public function __invoke(array $config) { $logger = new Logger($config['name']); // 此处根据你的Mongo连接方式实例化对应Handler,绑定到$logger // 示例:$handler = new MongoDBHandler(new \MongoDB\Client(), $config['database'], $config['collection']); // $logger->pushHandler($handler); return $logger; } } - 确认
- 第四步:确认调用引入的Facade正确
检查写入日志的文件头部,确认Log门面引入正确,没有引入其他同名类:use Illuminate\Support\Facades\Log;
补充说明:如果执行config:show能看到logins配置,但依然报错,检查你的代码里有没有提前调用Log相关方法、或者在服务提供者启动阶段就触发了日志加载,导致配置还没加载完成就被解析。
内容的提问来源于stack exchange,提问作者Mukesh
相关产品推荐
相关产品推荐

