文档菜单
文档首页
/ / /
PHP库手册
/ /

MongoDB\Client::addSubscriber()

本页内容

  • 定义
  • 参数
  • 错误/异常
  • 行为
  • 示例
  • 另请参阅

新增在版本1.18.

MongoDB\Client::addSubscriber()

将监控事件订阅者注册到该客户端。订阅者将通知此客户端的所有事件。

function addSubscriber(MongoDB\Driver\Monitoring\Subscriber $subscriber): void
$subscriber : MongoDB\Driver\Monitoring\Subscriber
要注册到此客户端的监控事件订阅者。

MongoDB\Exception\InvalidArgumentException 与参数或选项解析相关的错误。

MongoDB\Driver\Exception\InvalidArgumentException 如果订阅者是 MongoDB\Driver\Monitoring\LogSubscriber,因为记录器只能通过 MongoDB\Driver\Monitoring\addSubscriber. 全局注册

如果 $subscriber 已经与该客户端注册,则此函数为无操作。如果 $subscriber 还在全局注册,它仍然只会为该客户端的每个事件通知一次。

创建一个 MongoDB\Driver\Monitoring\CommandSubscriber 记录所有事件

<?php
use MongoDB\Driver\Monitoring\CommandSubscriber;
use MongoDB\Driver\Monitoring\CommandStartedEvent;
use MongoDB\Driver\Monitoring\CommandSucceededEvent;
use MongoDB\Driver\Monitoring\CommandFailedEvent;
class LogCommandSubscriber implements CommandSubscriber
{
private $stream;
public function __construct($stream)
{
$this->stream = $stream;
}
public function commandStarted(CommandStartedEvent $event): void
{
fwrite($this->stream, sprintf(
'Started command #%d "%s": %s%s',
$event->getRequestId(),
$event->getCommandName(),
Document::fromPHP($event->getCommand())->toCanonicalExtendedJSON(),
PHP_EOL,
));
}
public function commandSucceeded(CommandSucceededEvent $event): void
{
fwrite($this->stream, sprintf(
'Succeeded command #%d "%s" in %d microseconds: %s%s',
$event->getRequestId(),
$event->getCommandName(),
$event->getDurationMicros(),
json_encode($event->getReply()),
PHP_EOL,
));
}
public function commandFailed(CommandFailedEvent $event): void
{
fwrite($this->stream, sprintf(
'Failed command #%d "%s" in %d microseconds: %s%s',
$event->getRequestId(),
$event->getCommandName(),
$event->getDurationMicros(),
$event->getError()->getMessage(),
PHP_EOL,
));
}
}

然后可以将订阅者注册到客户端

<?php
$client = new MongoDB\Client();
$subscriber = new LogCommandSubscriber(STDERR);
$client->addSubscriber($subscriber);
$client->test->users->insertOne(['username' => 'alice']);

上述代码将以下内容写入stderr输出

Started command #1 "insert": { "insert" : "users", "ordered" : true, "$db" : "test", "lsid" : { "id" : { "$binary" : { "base64" : "dKTBhZD7Qvi0vUhvR58mCA==", "subType" : "04" } } }, "documents" : [ { "username" : "alice", "_id" : { "$oid" : "655d1fca12e81018340a4fc2" } } ] }
Succeeded command #1 "insert" in 876 microseconds: {"n":1,"ok":1}

返回

__get()