src/EventSubscriber/ApiRequestLogSubscriber.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Psr\Log\LoggerInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. class ApiRequestLogSubscriber implements EventSubscriberInterface
  8. {
  9. public function __construct(
  10. private readonly LoggerInterface $logger
  11. ){
  12. }
  13. public static function getSubscribedEvents(): array
  14. {
  15. return [
  16. KernelEvents::CONTROLLER => 'onKernelController',
  17. ];
  18. }
  19. public function onKernelController(ControllerEvent $event): void
  20. {
  21. if(!$event->isMainRequest()) return;
  22. $controller = $event->getController();
  23. if(is_array($controller))
  24. {
  25. $controllerClass = get_class($controller[0]);
  26. $controllerMethod = $controller[1];
  27. }
  28. elseif(is_object($controller))
  29. {
  30. $controllerClass = get_class($controller);
  31. $controllerMethod = '__invoke';
  32. }
  33. else
  34. {
  35. return;
  36. }
  37. if(!str_starts_with($controllerClass, 'App\\Controller\\API\\')) return;
  38. $request = $event->getRequest();
  39. $this->logger->info('API call', [
  40. 'route' => $request->attributes->get('_route'),
  41. 'method' => $request->getMethod(),
  42. 'path' => $request->getPathInfo(),
  43. 'query' => $request->query->all(),
  44. 'controller' => $controllerClass . '::' . $controllerMethod
  45. ]);
  46. }
  47. }