src/EventListener/LogPublisherSubscriber.php line 26

  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.             // Use one of the following two options
  28.             // $log = json_encode($httpLog);
  29.             // $log = $httpLog->__toString();
  30.             // file_put_contents('/opt/gateway-2/gateway-2/output'.time().'.txt', $log."\n\n", FILE_APPEND | LOCK_EX);
  31.             $this->logPublisherService->logHttp($httpLog);
  32.         } catch (\Throwable $e) {
  33.             $this->logger->error('Error when trying to publish logs: '.$e->getMessage());
  34.         }
  35.     }
  36.     private function buildHttpLog(HttpLogEvent $event): HttpLog
  37.     {
  38.         $request $event->getRequest();
  39.         $response $event->getResponse();
  40.         $uri $request->getUri();
  41.         $statusCode $response->getStatusCode();
  42.         $dateTime date('c'time());
  43.         return new HttpLog(
  44.             url$uri,
  45.             request$request,
  46.             response$response,
  47.             status$statusCode,
  48.             dateTime$dateTime,
  49.         );
  50.     }
  51. }