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()) return;
  21. $controller = $event->getController();
  22. if(is_array($controller))
  23. {
  24. $controllerClass = get_class($controller[0]);
  25. $controllerMethod = $controller[1];
  26. }
  27. elseif(is_object($controller))
  28. {
  29. $controllerClass = get_class($controller);
  30. $controllerMethod = '__invoke';
  31. }
  32. else
  33. {
  34. return;
  35. }
  36. if(!str_starts_with($controllerClass, 'App\\Controller\\API\\')) return;
  37. $request = $event->getRequest();
  38. $this->logger->info('API call', [
  39. 'route' => $request->attributes->get('_route'),
  40. 'method' => $request->getMethod(),
  41. 'path' => $request->getPathInfo(),
  42. 'query' => $request->query->all(),
  43. 'controller' => $controllerClass . '::' . $controllerMethod
  44. ]);
  45. }
  46. }