<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Psr\Log\LoggerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class LoggerSubscriber
{
protected $tokenStorage;
protected $logger;
public function __construct(TokenStorageInterface $tokenStorage, LoggerInterface $logger)
{
$this->tokenStorage = $tokenStorage;
$this->logger = $logger;
}
public function onKernelResponse(ResponseEvent $event)
{
$response = $event->getResponse();
$request = $event->getRequest();
$checkPath = '/api';
if (strpos($request->getRequestUri(), $checkPath) !== 0) {
return;
}
$this->logger->debug("***** LoggerListener API event to be logged found");
$timestamp = date("Y-m-d H:i:s");
$method = $request->getMethod();
$action = $request->getPathInfo();
$ip = $event->getRequest()->getClientIp();
$user = 'Unknown';
$token = $this->tokenStorage->getToken();
if (null !== $token) {
$user = $token->getUser();
if ($user instanceof User) {
$user = $user->getId();
}
}
$statusCode = $response->getStatusCode();
$this->logger->debug(sprintf("%s user-%s [%s] \"%s %s %s\"", $ip, $user, $timestamp, $method, $action, $statusCode));
}
}