src/Infrastructure/Logger/RequestDetailsLogger.php line 62

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Infrastructure\Logger;
  4. use App\Module\Account\Entity\User;
  5. use Psr\Log\LoggerInterface;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\Security\Core\Security;
  9. /**
  10. * On each request, log some details
  11. * URI, Referer, Commercetools Customer
  12. *
  13. * HINT: run after Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelRequest() to have access to
  14. * the user object
  15. *
  16. * @package App\Subscriber
  17. */
  18. class RequestDetailsLogger
  19. {
  20. /**
  21. * @var LoggerInterface
  22. */
  23. private LoggerInterface $logger;
  24. /**
  25. * @var RequestStack
  26. */
  27. private RequestStack $requestStack;
  28. /**
  29. * @var Security
  30. */
  31. private Security $security;
  32. /**
  33. * ExceptionListener constructor.
  34. *
  35. */
  36. public function __construct(LoggerInterface $logger, RequestStack $requestStack, Security $security)
  37. {
  38. $this->logger = $logger;
  39. $this->requestStack = $requestStack;
  40. $this->security = $security;
  41. }
  42. /**
  43. * @param RequestEvent $event
  44. */
  45. public function onKernelRequest(RequestEvent $event): void
  46. {
  47. $context = [];
  48. $request = $this->requestStack->getCurrentRequest();
  49. if ($request) {
  50. $context['uri'] = $request->getUri();
  51. $context['referer'] = $request->headers->get('referer');
  52. }
  53. $user = $this->security->getUser();
  54. if ($user && $user instanceof User) {
  55. $context['ct-customer-id'] = $user->getCustomerId();
  56. }
  57. $this->logger->info('Request Info', $context);
  58. }
  59. }