Php `sentry/sdk 2.x`-如何注册它';s错误/异常处理

Php `sentry/sdk 2.x`-如何注册它';s错误/异常处理,php,exception,error-handling,sentry,Php,Exception,Error Handling,Sentry,当我们同时使用多个sentry实例时,我放弃了sentry客户端的默认初始化,并设法手动创建sentry客户端 $client=ClientBuilder::create( [ 'dsn'=>this->config->getDsn(), “环境”=>this->config->getEnvironment(), 'release'=>this->config->getRelease(), 'error\u types'=>this->config->getErrorReporting() ]

当我们同时使用多个sentry实例时,我放弃了sentry客户端的默认初始化,并设法手动创建sentry客户端

$client=ClientBuilder::create(
[
'dsn'=>this->config->getDsn(),
“环境”=>this->config->getEnvironment(),
'release'=>this->config->getRelease(),
'error\u types'=>this->config->getErrorReporting()
]
)->getClient();
我现在可以手动捕获异常/错误或消息

$client->captureException(…);

但我不知道如何手动注册Sentry的异常/错误处理程序?

我们通过集成处理全局未处理的异常。 集成的工作方式有点不同,因为它们本质上是单例的,并且需要能够保持全局状态,因为我们不想在全局处理程序中多次挂接

为了实现您想要的,您需要使用
Hub
,而不是直接使用
客户端

$client1=Sentry\ClientBuilder::create([
“dsn”=>“dsn”
])->getClient();
$hub1=新哨兵\州\中心($client1);
//使集线器成为当前集线器,通知全局集成将内容发送到在此集线器中注册的客户端
Sentry\SentrySdk::setCurrentHub($hub1);
//这将由$client1捕获并发送
抛出新异常('DEMO TEST3');
$client2=Sentry\ClientBuilder::create([
“dsn”=>“dsn”
])->getClient();
$hub2=新哨兵\州\中心($client2);
//在此处设置新的当前集线器
Sentry\SentrySdk::setCurrentHub($hub2);
//这将由$client2捕获并发送
抛出新异常('DEMO TEST4');
因此,一次只能有一个中心是当前中心,因此您的一个客户机必须是处理全局异常的客户机。
我希望这是有意义的。

是的。我也发现了这一点,并准备编写一个
HubCollection
来实现
hubcointerface
。这将是一个触发多个客户端的好方法。但后来一位同事想起了我,每次只注册一个errorhandler。