如何像 Symfony 一样“重用”原始 Symfony ErrorListener 来记录异常?

问题描述 投票:0回答:1

Symfony 默认

ErrorListener
将记录未捕获的异常,考虑到
WithErrorLevel
属性、状态代码,并将漂亮地打印带有大量信息的错误。

在我的控制器中,我调用可能抛出的操作:

  1. 如果我识别出异常(基于通用接口),我将向用户显示自定义错误消息
  2. 如果我无法识别异常,我想调用
    ErrorListener
    为我记录异常

知道如何使用

ErrorListerner
订阅者记录异常吗?

php symfony
1个回答
0
投票
<?php

namespace App\EventSubscriber;

use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;

readonly class ExceptionSubscriber implements EventSubscriberInterface
{
    public function __construct(
        private LoggerInterface $logger
    ) {
    }

    public static function getSubscribedEvents(): array
    {
        return [
            KernelEvents::EXCEPTION => 'onKernelException',
        ];
    }

    public function onKernelException(ExceptionEvent $event): void
    {
        $throwable = $event->getThrowable();
        
        if ($throwable instanceof \InvalidArgumentException) {
            $event->setResponse(...);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.