我尝试创建一个mongodb日志记录通道
'mongo' => [
'driver' => 'monolog',
'handler' => \Monolog\Handler\MongoDBHandler::class,
'formatter' => \Monolog\Formatter\MongoDBFormatter::class,
'handler_with' => [
'mongo' => new \MongoDB\Client("mongodb://localhost:27017"),
'database' => 'testdb',
'collection' => 'testcoll'
]
],
然而,我得到错误:
Illuminate\Contracts\Container\BindingResolutionException(code: 0): Unresolvable dependency resolving [Parameter #0 [ <required> $mongodb ]] in class Monolog\Handler\MongoDBHandler
只有当我尝试向类构造函数添加类型提示时,错误才得以解决,但显然我不能这样做,因为它是一个包:
public function __construct(Client<<if I add this it works>> $mongodb, string $database, string $collection, $level = Logger::DEBUG, bool $bubble = true)
有什么解决办法吗?
2条答案
按热度按时间5kgi1eie1#
所以,我想在这里添加一个完整的答案,因为这篇文章是第一个显示时,寻找添加一个mongo日志记录器,因为答案是埋在评论,我想添加一个适当的答案。
解决方案是将
handler_with
数组中的键mongo
更改为mongodb
。工作代码如下所示:
另外,可以在
formatter
的同一层添加以下元素来设置自定义最大嵌套层,这是因为默认情况下,存储的文档深度不能大于3,并且在日志中会自动转换为“[...]”。警告,在递归的情况下,或者是一个非常深的数组,它可能会在mongo中引起问题,因为它不支持超过100层的嵌套。
xxhby3vn2#
根据Laravel 8.x文档:
因此,您需要为
MongoDBHandler
配置服务。正如您在查看处理程序源代码时提到的,第一个参数是$mongodb
。并且为了能够解决这种依赖性,我们可以配置服务容器: