Symfony 4 - Bugsnag - Игнорировать конкретный тип исключения - PullRequest
4 голосов
/ 14 июня 2019

Я использую Bugsnag для регистрации ошибок для нашего приложения.Приложение построено на Symfony 4, и у меня есть собственный слушатель, который перехватывает исключения и обрабатывает некоторые из них.Что мне нужно, это сказать Bugsnag игнорировать исключения, которые я обрабатываю вручную (нет необходимости регистрировать их, поскольку они уже обработаны).

Мой пользовательский прослушиватель имеет более высокий приоритет, чем прослушиватель Bugsnag (поэтомупобежал первым).Проблема заключается в том, что остановка распространения события нарушает другие функции (например, прослушиватель безопасности больше не запускается, поскольку он имеет более низкий приоритет, чем bugsnag по умолчанию).

Ниже приведен мой код прослушивателя (ну ... соответствующая частьэто):

class ExceptionListener
{

protected $router;
private $mailerService;
private $tokenStorage;
private $request;
private $em;
/**
 * @var UtilsService
 */
private $utilsService;

public function __construct(Router $router, MailerService $mailerService, TokenStorageInterface $tokenStorage, RequestStack $request, EntityManagerInterface $em, UtilsService $utilsService)
{
    $this->router = $router;
    $this->mailerService = $mailerService;
    $this->tokenStorage = $tokenStorage;
    $this->request = $request;
    $this->em = $em;
    $this->utilsService = $utilsService;
}

public function onKernelException(ExceptionEvent $event)
{
    $exception = $event->getException();
    $message = $exception->getMessage();

    switch (true) {
        case $exception instanceof NotFoundHttpException:
             // Redirect somewhere
        break;
        case $exception instanceof CustomException:
             // Do some stuff
             $event->stopPropagation(); // This does what I need (stops propagation to bugsnag listener) but breaks other things so is not a solution (since it stops propagation to everything).
        break;
    }

    return false;
}
}

Мне нужно просто ... если выброшенное исключение является экземпляром CustomException, я хочу, чтобы оно НЕ отправлялось в Bugsnag.

2 возможных решениячто я вижу (другие приветствуются ofc):

  • говорит bugsnag как-то игнорировать это исключение: в документации по bugsnag я нахожу, как это сделать для Laravel (https://docs.bugsnag.com/platforms/php/laravel/configuration-options/ -с использованием dontReport) и Ruby (https://docs.bugsnag.com/platforms/ruby/other/configuration-options/#ignore_classes),, но не для Symfony. Есть идеи, как это сделать?

  • остановить распространение события только для прослушивателя ошибок: я обнаружил, что нетдокументация относительно этого вообще. Есть идеи, как это сделать?

1 Ответ

2 голосов
/ 14 июня 2019

Вы можете реализовать обратный вызов и проверить объект отчета, как описано здесь: https://docs.bugsnag.com/platforms/php/symfony/configuration-options/#callbacks

Просто верните false из обратного вызова, чтобы предотвратить сообщение в Bugsnag.

...