<?php
namespace App\EventSubscriber;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class HttpLoggingSubscriber implements EventSubscriberInterface
{
private LoggerInterface $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 0],
KernelEvents::RESPONSE => ['onKernelResponse', 0],
];
}
public function onKernelRequest(RequestEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
$request = $event->getRequest();
$context = [
'method' => $request->getMethod(),
'uri' => $request->getRequestUri(),
'client_ip' => $request->getClientIp(),
'content_type' => $request->headers->get('Content-Type'),
];
$this->logger->info('HTTP Request', $context);
error_log('[HTTP Request] ' . $request->getMethod() . ' ' . $request->getRequestUri());
}
public function onKernelResponse(ResponseEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
$request = $event->getRequest();
$response = $event->getResponse();
$context = [
'method' => $request->getMethod(),
'uri' => $request->getRequestUri(),
'status_code' => $response->getStatusCode(),
'content_type' => $response->headers->get('Content-Type'),
];
$this->logger->info('HTTP Response', $context);
error_log('[HTTP Response] ' . $request->getMethod() . ' ' . $request->getRequestUri() . ' ' . $response->getStatusCode());
}
}