src/Log/EventSubscriber/ExceptionSubscriber.php line 58

Open in your IDE?
  1. <?php
  2. namespace App\Log\EventSubscriber;
  3. use App\Log\Entity\Log;
  4. use App\Log\Service\LogFactory;
  5. use Monolog\Logger;
  6. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. class ExceptionSubscriber extends BaseSubscriber implements EventSubscriberInterface
  11. {
  12.     protected const EVENTS = [
  13.         KernelEvents::EXCEPTION => 'onException'
  14.     ];
  15.     public const EXCEPTION_OCCURRED 'exception_occurred';
  16.     /**
  17.      * @var LogFactory
  18.      */
  19.     protected LogFactory $logFactory;
  20.     /**
  21.      * ExceptionSubscriber constructor.
  22.      * @param LogFactory $logFactory
  23.      * @param ContainerBagInterface $containerBag
  24.      */
  25.     public function __construct(LogFactory $logFactoryContainerBagInterface $containerBag)
  26.     {
  27.         $this->logFactory $logFactory;
  28.         parent::__construct($containerBag);
  29.     }
  30.     /**
  31.      * @return string[]
  32.      */
  33.     public static function getSubscribedEvents(): array
  34.     {
  35.         return self::EVENTS;
  36.     }
  37.     /**
  38.      * @param ExceptionEvent $event
  39.      */
  40.     public function onException(ExceptionEvent $event): void
  41.     {
  42.         if ($this->supports($event->getRequest()->getUri())) {
  43.             $event->getRequest()->attributes->set(self::EXCEPTION_OCCURREDtrue);
  44.             $this->logFactory->log(Logger::ERROR,
  45.                 'Error: ' $event->getThrowable()->getCode(),
  46.                 [
  47.                     'message' => $event->getThrowable()->getMessage(),
  48.                     'trace' => $event->getThrowable()->getTraceAsString()
  49.                 ],
  50.                 Log::TYPE_ERROR
  51.             );
  52.         }
  53.     }
  54. }