src/EventListener/ApiPlatformListener.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Psr\Log\LoggerInterface;
  4. use ApiPlatform\Core\EventListener\EventPriorities;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. use Symfony\Component\HttpKernel\Event\RequestEvent;
  9. class ApiPlatformListener implements EventSubscriberInterface
  10. {
  11.     private $logger;
  12.     private $handledExceptions = [];
  13.     public function __construct(LoggerInterface $apiPlatformLogger)
  14.     {
  15.         $this->logger $apiPlatformLogger;
  16.     }
  17.     public static function getSubscribedEvents()
  18.     {
  19.         return [
  20.             KernelEvents::REQUEST => ['onKernelRequest'EventPriorities::POST_READ],
  21.             KernelEvents::EXCEPTION => 'onKernelException'
  22.         ];
  23.     }
  24.     public function onKernelRequest(RequestEvent $event)
  25.     {
  26.         $request $event->getRequest();
  27.         if (null !== $request->attributes->get('_api_resource_class')) {
  28.             $this->logger->info($request->getMethod(), [
  29.                 'url' => $request->getUri(),
  30.                 'resource' => $request->attributes->get('_api_resource_class'),
  31.                 'parameters' => $request->query->all(),
  32.                 'body' => $request->getContent(),
  33.                 'client_ip' => $request->getClientIp(),
  34.             ]);
  35.         }
  36.     }
  37.     public function onKernelException(ExceptionEvent $event)
  38.     {
  39.         $exception $event->getThrowable();
  40.         $request $event->getRequest();
  41.         
  42.         if (null === $request->attributes->get('_api_resource_class')) {
  43.             return;
  44.         }
  45.         $requestId md5($request->getUri() . $request->getClientIp() . $request->getContent());
  46.         if (isset($this->handledExceptions[$requestId])) {
  47.             return;
  48.         }
  49.         $this->handledExceptions[$requestId] = true;
  50.         $this->logger->error($exception->getMessage(), [
  51.             'code' => $exception->getCode(),
  52.             'method' => $request->getMethod(),
  53.             'url' => $request->getUri(),
  54.             'parameters' => $request->query->all(),
  55.             'body' => $request->getContent(),
  56.             'client_ip' => $request->getClientIp(),
  57.         ]);
  58.     }
  59. }