src/CoreBundle/Component/Log/SlowLogSubscriber.php line 50

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\CoreBundle\Component\Log;
  4. use Symfony\Bridge\Monolog\Logger;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  7. use Symfony\Component\HttpKernel\Event\PostResponseEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. class SlowLogSubscriber implements EventSubscriberInterface
  10. {
  11.     public const REQUEST_TIME_LIMIT_SECONDS 2;
  12.     /**
  13.      * @var \Symfony\Bridge\Monolog\Logger
  14.      */
  15.     protected $logger;
  16.     /**
  17.      * @var float
  18.      */
  19.     protected $startTime;
  20.     /**
  21.      * @param \Symfony\Bridge\Monolog\Logger $logger
  22.      */
  23.     public function __construct(Logger $logger)
  24.     {
  25.         $this->logger $logger;
  26.         $this->startTime 0;
  27.     }
  28.     /**
  29.      * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
  30.      */
  31.     public function initStartTime(GetResponseEvent $event)
  32.     {
  33.         if ($event->isMasterRequest()) {
  34.             $this->startTime microtime(true);
  35.         }
  36.     }
  37.     /**
  38.      * @param \Symfony\Component\HttpKernel\Event\PostResponseEvent $event
  39.      */
  40.     public function addNotice(PostResponseEvent $event)
  41.     {
  42.         $requestTime $this->getRequestTime();
  43.         if ($requestTime > static::REQUEST_TIME_LIMIT_SECONDS) {
  44.             $requestUri $event->getRequest()->getRequestUri();
  45.             $controllerNameAndAction $event->getRequest()->get('_controller');
  46.             $message $requestTime ' ' $controllerNameAndAction ' ' $requestUri;
  47.             $this->logger->addNotice($message);
  48.         }
  49.     }
  50.     /**
  51.      * @return float
  52.      */
  53.     protected function getRequestTime()
  54.     {
  55.         return microtime(true) - $this->startTime;
  56.     }
  57.     /**
  58.      * @return array
  59.      */
  60.     public static function getSubscribedEvents()
  61.     {
  62.         return [
  63.             KernelEvents::REQUEST => 'initStartTime',
  64.             KernelEvents::TERMINATE => 'addNotice',
  65.         ];
  66.     }
  67. }