src/EventSubscriber/ApiRequestLogSubscriber.php line 23

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(private readonly LoggerInterface $logger)
  10. {
  11. }
  12. public static function getSubscribedEvents(): array
  13. {
  14. return [
  15. KernelEvents::CONTROLLER => 'onKernelController',
  16. ];
  17. }
  18. public function onKernelController(ControllerEvent $event): void
  19. {
  20. if (!$event->isMainRequest()) {
  21. return;
  22. }
  23. $controller = $event->getController();
  24. if (is_array($controller)) {
  25. $controllerClass = get_class($controller[0]);
  26. $controllerMethod = $controller[1];
  27. } elseif (is_object($controller)) {
  28. $controllerClass = get_class($controller);
  29. $controllerMethod = '__invoke';
  30. } else {
  31. return;
  32. }
  33. if (!str_starts_with($controllerClass, 'App\\Controller\\API\\')) {
  34. return;
  35. }
  36. $request = $event->getRequest();
  37. $this->logger->info('API call', [
  38. 'route' => $request->attributes->get('_route'),
  39. 'method' => $request->getMethod(),
  40. 'path' => $request->getPathInfo(),
  41. 'query' => $request->query->all(),
  42. 'controller' => $controllerClass . '::' . $controllerMethod
  43. ]);
  44. }
  45. }