src/EventListener/KernelRequestListener.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Log;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Doctrine\Persistence\AbstractManagerRegistry;
  6. use Exception;
  7. use Psr\Log\LoggerInterface;
  8. use Symfony\Component\HttpKernel\Event\RequestEvent;
  9. use Symfony\Component\HttpKernel\KernelInterface;
  10. use Symfony\Component\Security\Core\Security;
  11. use Throwable;
  12. class KernelRequestListener
  13. {
  14.     public function __construct(
  15.         private Security $security,
  16.         private KernelInterface $kernel,
  17.         private EntityManagerInterface $em,
  18.         private LoggerInterface $logger
  19.     ){}
  20.     public function onKernelRequest(RequestEvent $event)
  21.     {
  22.         try {
  23.             $this->logger->debug("Start ".__function__." ".__class__);
  24.             $log = new Log();
  25.             $request $event->getRequest()->request->All();
  26.             $query $event->getRequest()->query->All();
  27.             $headers $event->getRequest()->headers->All();
  28.             $user $this->security->getUser();
  29.             $log->setUser($user?->getUserIdentifier()??'anonymous');
  30.             $log->setRoles($user?->getRoles());
  31.             $log->setMethod($event->getRequest()->server->get('REQUEST_METHOD'));
  32.             $log->setWebservice($event->getRequest()->attributes->get("_route"));
  33.             $log->setUri($event->getRequest()->server->get('PATH_INFO'));
  34.             $log->setRequest($request);
  35.             $log->setHeaders($headers);
  36.             $log->setQuery($query);
  37.             $log->setReferer($event->getRequest()->server->get('HTTP_REFERER'));
  38.             $log->setServerName($event->getRequest()->server->get('SERVER_NAME'));
  39.             $log->setServerAddr($event->getRequest()->server->get('SERVER_ADDR'));
  40.             $log->setUserAgent($event->getRequest()->server->get('HTTP_USER_AGENT'));
  41.             $log->setRemoteAddr($event->getRequest()->server->get('REMOTE_ADDR'));
  42.             $this->em->persist($log);
  43.             $this->em->flush();
  44.         }
  45.         catch (Throwable $e)
  46.         {
  47.             if (!$this->em->isOpen()) {
  48.                 $this->em $GLOBALS['app']->getContainer()->get('doctrine')->resetManager();
  49.             }
  50.             $this->logger->error("ERROR H-".uniqid().": {$e->getMessage()} file {$e->getFile()}:{$e->getLine()}. Trace: {$e->getTraceAsString()}");
  51.             //if ($this->kernel->getEnvironment() === "dev") throw $e;
  52.         }
  53.         catch (Exception $e)
  54.         {
  55.             if (!$this->em->isOpen()) {
  56.                 $this->em $GLOBALS['app']->getContainer()->get('doctrine')->resetManager();
  57.             }
  58.             $this->logger->error("ERROR H-".uniqid().": {$e->getMessage()} file {$e->getFile()}:{$e->getLine()}. Trace: {$e->getTraceAsString()}");
  59.             //if ($this->kernel->getEnvironment() === "dev") throw $e;
  60.         }
  61.         finally
  62.         {
  63.             $this->logger->debug("End ".__function__." ".__class__);
  64.         }
  65.     }
  66. }