src/EventListener/LogPublisherSubscriber.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Event\HttpLogEvent;
  4. use App\Service\LogPublisher\Domain\HttpLog;
  5. use App\Service\LogPublisher\LogPublisherServiceInterface;
  6. use Psr\Log\LoggerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. class LogPublisherSubscriber implements EventSubscriberInterface
  9. {
  10.     public function __construct(
  11.         private LoggerInterface $logger,
  12.         private LogPublisherServiceInterface $logPublisherService
  13.     ) {
  14.     }
  15.     public static function getSubscribedEvents(): array
  16.     {
  17.         return [
  18.             HttpLogEvent::class => 'logHttpEvent',
  19.         ];
  20.     }
  21.     public function logHttpEvent(HttpLogEvent $event): void
  22.     {
  23.         try {
  24.             // must be non-fatal
  25.             $httpLog $this->buildHttpLog($event);
  26.             // $this->logger->notice(json_encode($httpLog));
  27.             $this->logPublisherService->logHttp($httpLog);
  28.         } catch (\Throwable $e) {
  29.             $this->logger->error('Error when trying to publish logs: '.$e->getMessage());
  30.         }
  31.     }
  32.     private function buildHttpLog(HttpLogEvent $event): HttpLog
  33.     {
  34.         $request $event->getRequest();
  35.         $response $event->getResponse();
  36.         $uri $request->getUri();
  37.         $statusCode $response->getStatusCode();
  38.         $dateTime date('c'time());
  39.         return new HttpLog(
  40.             url$uri,
  41.             request$request,
  42.             response$response,
  43.             status$statusCode,
  44.             dateTime$dateTime,
  45.         );
  46.     }
  47. }