<?php
namespace App\SupplierApiBundle\Services;
use App\Entity\Supplier;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\Security\Core\Security;
class SupplierRequestLogger
{
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var string
*/
private $host;
/**
* @var Security
*/
private $security;
public function __construct(LoggerInterface $logger, string $host, Security $security)
{
$this->logger = $logger;
$this->host = $host;
$this->security = $security;
}
public function onKernelResponse(ResponseEvent $event)
{
$request = $event->getRequest();
$response = $event->getResponse();
/** @var Supplier $user */
$user = $this->security->getUser();
if ($this->host === $request->getHost()) {
$this->logger->info(sprintf(
"%s %s, IP = %s, supplier = %s, status = %d, response = %s",
$request->getMethod(),
$request->getUri(),
$request->getClientIp(),
$this->getUserName($user),
$response->getStatusCode(),
$response->getContent()
));
}
}
private function getUserName($user): string
{
if ($user && $user instanceof Supplier) {
return $user->getCompanyName().' ('.$user->getId().')';
}
return 'Anonymous';
}
}