src/EventSubscriber/HttpLoggingSubscriber.php line 47

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\RequestEvent;
  6. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. class HttpLoggingSubscriber implements EventSubscriberInterface
  9. {
  10. private LoggerInterface $logger;
  11. public function __construct(LoggerInterface $logger)
  12. {
  13. $this->logger = $logger;
  14. }
  15. public static function getSubscribedEvents(): array
  16. {
  17. return [
  18. KernelEvents::REQUEST => ['onKernelRequest', 0],
  19. KernelEvents::RESPONSE => ['onKernelResponse', 0],
  20. ];
  21. }
  22. public function onKernelRequest(RequestEvent $event): void
  23. {
  24. if (!$event->isMainRequest()) {
  25. return;
  26. }
  27. $request = $event->getRequest();
  28. $context = [
  29. 'method' => $request->getMethod(),
  30. 'uri' => $request->getRequestUri(),
  31. 'client_ip' => $request->getClientIp(),
  32. 'content_type' => $request->headers->get('Content-Type'),
  33. ];
  34. $this->logger->info('HTTP Request', $context);
  35. error_log('[HTTP Request] ' . $request->getMethod() . ' ' . $request->getRequestUri());
  36. }
  37. public function onKernelResponse(ResponseEvent $event): void
  38. {
  39. if (!$event->isMainRequest()) {
  40. return;
  41. }
  42. $request = $event->getRequest();
  43. $response = $event->getResponse();
  44. $context = [
  45. 'method' => $request->getMethod(),
  46. 'uri' => $request->getRequestUri(),
  47. 'status_code' => $response->getStatusCode(),
  48. 'content_type' => $response->headers->get('Content-Type'),
  49. ];
  50. $this->logger->info('HTTP Response', $context);
  51. error_log('[HTTP Response] ' . $request->getMethod() . ' ' . $request->getRequestUri() . ' ' . $response->getStatusCode());
  52. }
  53. }