src/Eccube/EventListener/LogListener.php line 117

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Eccube\EventListener;
  13. use Psr\Log\LoggerInterface;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  16. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  17. use Symfony\Component\HttpKernel\Event\RequestEvent;
  18. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  19. use Symfony\Component\HttpKernel\Event\TerminateEvent;
  20. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  21. use Symfony\Component\HttpKernel\KernelEvents;
  22. /**
  23.  * ログ出力リスナー
  24.  */
  25. class LogListener implements EventSubscriberInterface
  26. {
  27.     /**
  28.      * @var LoggerInterface
  29.      */
  30.     protected $logger;
  31.     public function __construct(LoggerInterface $logger)
  32.     {
  33.         $this->logger $logger;
  34.     }
  35.     /**
  36.      * {@inheritdoc}
  37.      */
  38.     public static function getSubscribedEvents()
  39.     {
  40.         return [
  41.             KernelEvents::REQUEST => [
  42.                 // Application::initRenderingで、フロント/管理画面の判定が行われた後に実行
  43.                 ['onKernelRequestEarly'500],
  44.                 // SecurityServiceProviderで、認証処理が完了した後に実行.
  45.                 ['onKernelRequest'6],
  46.             ],
  47.             KernelEvents::RESPONSE => ['onKernelResponse'0],
  48.             KernelEvents::CONTROLLER => ['onKernelController'0],
  49.             KernelEvents::TERMINATE => ['onKernelTerminate'0],
  50.             /*
  51.              * Priority -4 is used to come after those from SecurityServiceProvider (0)
  52.              * but before the error handlers added with Silex\Application::error (defaults to -8)
  53.              */
  54.             KernelEvents::EXCEPTION => ['onKernelException', -4],
  55.         ];
  56.     }
  57.     /**
  58.      * @param RequestEvent $event
  59.      */
  60.     public function onKernelRequestEarly(RequestEvent $event)
  61.     {
  62.         if (!$event->isMainRequest()) {
  63.             return;
  64.         }
  65.         $this->logger->debug('INIT');
  66.     }
  67.     /**
  68.      * @param ResponseEvent $event
  69.      */
  70.     public function onKernelRequest(RequestEvent $event)
  71.     {
  72.         if (!$event->isMainRequest()) {
  73.             return;
  74.         }
  75.         $route $this->getRoute($event->getRequest());
  76.         $this->logger->debug('PROCESS START', [$route]);
  77.     }
  78.     /**
  79.      * ルーティング名を取得する.
  80.      *
  81.      * @param $request
  82.      *
  83.      * @return string
  84.      */
  85.     private function getRoute($request)
  86.     {
  87.         return $request->attributes->get('_route');
  88.     }
  89.     /**
  90.      * @param ControllerEvent $event
  91.      */
  92.     public function onKernelController(ControllerEvent $event)
  93.     {
  94.         if (!$event->isMainRequest()) {
  95.             return;
  96.         }
  97.         $route $this->getRoute($event->getRequest());
  98.         $this->logger->debug('LOGIC START', [$route]);
  99.     }
  100.     /**
  101.      * @param FilterResponseEvent $event
  102.      */
  103.     public function onKernelResponse(ResponseEvent $event)
  104.     {
  105.         if (!$event->isMainRequest()) {
  106.             return;
  107.         }
  108.         $route $this->getRoute($event->getRequest());
  109.         $this->logger->debug('LOGIC END', [$route]);
  110.     }
  111.     /**
  112.      * @param PostResponseEvent $event
  113.      */
  114.     public function onKernelTerminate(TerminateEvent $event)
  115.     {
  116.         $route $this->getRoute($event->getRequest());
  117.         $this->logger->debug('PROCESS END', [$route]);
  118.     }
  119.     /**
  120.      * @param ExceptionEvent $event
  121.      */
  122.     public function onKernelException(ExceptionEvent $event)
  123.     {
  124.         $e $event->getThrowable();
  125.         if ($e instanceof HttpExceptionInterface && $e->getStatusCode() < 500) {
  126.             $this->logger->info($e->getMessage(), [$e->getStatusCode()]);
  127.         } else {
  128.             $message sprintf(
  129.                 '%s: %s (uncaught exception) at %s line %s',
  130.                 get_class($e),
  131.                 $e->getMessage(),
  132.                 $e->getFile(),
  133.                 $e->getLine()
  134.             );
  135.             $this->logger->error($message, ['exception' => $e]);
  136.         }
  137.     }
  138. }