src/EventListener/LmsIntegrationExceptionListener.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Service\LmsIntegration\Exceptions\LmsIntegrationExceptionInterface;
  4. use Psr\Log\LoggerInterface;
  5. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  6. use Symfony\Component\HttpFoundation\Response;
  7. class LmsIntegrationExceptionListener
  8. {
  9.     private $logger;
  10.     public function __construct(LoggerInterface $logger)
  11.     {
  12.         $this->logger $logger;
  13.     }
  14.     public function onKernelException(ExceptionEvent $event)
  15.     {
  16.         if (!$event->getThrowable() instanceof LmsIntegrationExceptionInterface) {
  17.             return;
  18.         }
  19.         $response = new Response($event->getThrowable()->getMessage(), $event->getThrowable()->getStatusCode());
  20.         $event->setResponse($response);
  21.         $this->log($event->getThrowable());
  22.     }
  23.     private function log(\Throwable $exception)
  24.     {
  25.         $log = [
  26.             'code' => $exception->getStatusCode(),
  27.             'message' => $exception->getMessage(),
  28.             'called' => [
  29.                 'file' => $exception->getTrace()[0]['file'],
  30.                 'line' => $exception->getTrace()[0]['line'],
  31.             ],
  32.             'occurred' => [
  33.                 'file' => $exception->getFile(),
  34.                 'line' => $exception->getLine(),
  35.             ],
  36.         ];
  37.         if ($exception->getPrevious() instanceof \Exception) {
  38.             $log += [
  39.                 'previous' => [
  40.                     'message' => $exception->getPrevious()->getMessage(),
  41.                     'exception' => get_class($exception->getPrevious()),
  42.                     'file' => $exception->getPrevious()->getFile(),
  43.                     'line' => $exception->getPrevious()->getLine(),
  44.                 ],
  45.             ];
  46.         }
  47.         $this->logger->error(json_encode($log));
  48.     }
  49. }