`sentry / sdk 2.x` - как зарегистрировать обработку ошибок / исключений - PullRequest
0 голосов
/ 01 октября 2019

Хотя мы используем несколько экземпляров часового модуля одновременно, я отбросил инициализацию клиента Sentry по умолчанию и смог создать клиент Sentry вручную.

$client = ClientBuilder::create(
    [
        'dsn'         => $this->config->getDsn(),
        'environment' => $this->config->getEnvironment(),
        'release'     => $this->config->getRelease(),
        'error_types' => $this->config->getErrorReporting()
    ]
)->getClient();

Теперь я могу перехватывать исключения / ошибкиили сообщения вручную.

$client->captureException( ... );

Но что я не получаю, так это как вручную зарегистрировать обработчики исключений / ошибок Sentry?

1 Ответ

0 голосов
/ 02 октября 2019

Мы обрабатываем глобальные необработанные исключения посредством интеграций. Интеграции работают немного по-другому, поскольку они по сути являются одиночными и должны иметь возможность сохранять глобальное состояние, поскольку мы, например, не хотим многократно подключаться к глобальным обработчикам.

Для достижения того, что вы хотитевам необходимо использовать Hub вместо Client напрямую.

$client1 = Sentry\ClientBuilder::create([
  'dsn' => 'DSN'
])->getClient();

$hub1 = new Sentry\State\Hub($client1);
// Making a Hub current, tells the global integrations to send stuff to the client registered in this Hub
Sentry\SentrySdk::setCurrentHub($hub1);

// This will be caught by and send by $client1
throw new Exception('DEMO TEST3');

$client2 = Sentry\ClientBuilder::create([
  'dsn' => 'DSN'
])->getClient();

$hub2 = new Sentry\State\Hub($client2);
// Setting a new current hub here
Sentry\SentrySdk::setCurrentHub($hub2);

// This will be caught by and send by $client2
throw new Exception('DEMO TEST4');

Таким образом, только один концентратор может быть текущим концентратором одновременно, поэтому один из ваших клиентов должен быть тем, который обрабатывает глобальные исключения,Я надеюсь, что это имеет смысл.

...