5

我使用 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。

我看到的两种可能的解决方案是(欢迎其他人):

4

1 回答 1

3

您可以实现回调并检查报告对象,如下所述: https ://docs.bugsnag.com/platforms/php/symfony/configuration-options/#callbacks

只需false从回调中返回即可防止向 Bugsnag 报告。

于 2019-06-14T16:27:05.703 回答