symfony 4 - bugsnag - 忽略特定的异常类型
symfony 4 - bugsnag - Ignore specific exception type
我使用 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 种可能的解决方案是(欢迎其他解决方案):
告诉 bugsnag 以某种方式忽略该异常:在 bugsnag 文档中我找到了如何为 Laravel (https://docs.bugsnag.com/platforms/php/laravel/configuration-options/ - using dontReport) and Ruby (https://docs.bugsnag.com/platforms/ruby/other/configuration-options/#ignore_classes) 执行此操作,但不是为 Symfony。知道怎么做吗?
仅针对 bugsnag 侦听器停止传播事件:我找不到任何关于此的文档。知道怎么做吗?
您可以按照此处所述实施回调并检查报表对象:
https://docs.bugsnag.com/platforms/php/symfony/configuration-options/#callbacks
只需从回调中 return false
即可防止向 Bugsnag 报告。
我使用 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 种可能的解决方案是(欢迎其他解决方案):
告诉 bugsnag 以某种方式忽略该异常:在 bugsnag 文档中我找到了如何为 Laravel (https://docs.bugsnag.com/platforms/php/laravel/configuration-options/ - using dontReport) and Ruby (https://docs.bugsnag.com/platforms/ruby/other/configuration-options/#ignore_classes) 执行此操作,但不是为 Symfony。知道怎么做吗?
仅针对 bugsnag 侦听器停止传播事件:我找不到任何关于此的文档。知道怎么做吗?
您可以按照此处所述实施回调并检查报表对象: https://docs.bugsnag.com/platforms/php/symfony/configuration-options/#callbacks
只需从回调中 return false
即可防止向 Bugsnag 报告。