<?php
declare(strict_types=1);
namespace App\Infrastructure\Logger;
use App\Module\Account\Entity\User;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Security;
/**
* On each request, log some details
* URI, Referer, Commercetools Customer
*
* HINT: run after Symfony\Bundle\SecurityBundle\Debug\TraceableFirewallListener::onKernelRequest() to have access to
* the user object
*
* @package App\Subscriber
*/
class RequestDetailsLogger
{
/**
* @var LoggerInterface
*/
private LoggerInterface $logger;
/**
* @var RequestStack
*/
private RequestStack $requestStack;
/**
* @var Security
*/
private Security $security;
/**
* ExceptionListener constructor.
*
*/
public function __construct(LoggerInterface $logger, RequestStack $requestStack, Security $security)
{
$this->logger = $logger;
$this->requestStack = $requestStack;
$this->security = $security;
}
/**
* @param RequestEvent $event
*/
public function onKernelRequest(RequestEvent $event): void
{
$context = [];
$request = $this->requestStack->getCurrentRequest();
if ($request) {
$context['uri'] = $request->getUri();
$context['referer'] = $request->headers->get('referer');
}
$user = $this->security->getUser();
if ($user && $user instanceof User) {
$context['ct-customer-id'] = $user->getCustomerId();
}
$this->logger->info('Request Info', $context);
}
}