src/AppBundle/EventListener/LoggerRequestResponseListener.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\AppBundle\EventListener;
  3. use App\AdminBundle\Service\UserManager;
  4. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  5. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  6. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  7. use Psr\Log\LoggerInterface;
  8. use App\AdminBundle\Entity\User;
  9. class LoggerRequestResponseListener
  10. {
  11.     protected $logger;
  12.     protected $userManager;
  13.     public function __construct(LoggerInterface $loggerUserManager $userManager)
  14.     {
  15.         $this->logger $logger;
  16.         $this->userManager $userManager;
  17.     }
  18.     public function onKernelController(ControllerEvent $event)
  19.     {
  20.         $controllerArray $event->getController();
  21.         if (is_array($controllerArray)) {
  22.             if ($controllerArray[0] instanceof Controller) {
  23.                 // Record controller name
  24.                 $controllerNameString 'Called controller "' .
  25.                     get_class($controllerArray[0]) . '"';
  26.                 // Record action name
  27.                 $actionNameString ', action "' $controllerArray[1] . '"';
  28.                 // Record called method
  29.                 $methodString ' (method ' $event->getRequest()->getMethod() . ')';
  30.                 // Record request URL parameters
  31.                 $requestParams $event->getRequest()->attributes->all()['_route_params'];
  32.                 if (count($requestParams) > 0) {
  33.                     $requestParamsString ' with request URL params: ' .
  34.                         json_encode($requestParams) . ',';
  35.                 } else {
  36.                     $requestParamsString '';
  37.                 }
  38.                 // Record request query string, if any
  39.                 if (count($_GET) > 0) {
  40.                     $getQueryString ' with query string params: ' json_encode($_GET) .
  41.                         ',';
  42.                 } else {
  43.                     $getQueryString '';
  44.                 }
  45.                 // Record who does the action
  46.                 $user $this->userManager->getLoggedUser();
  47.                 if ($user instanceof User) {
  48.                     $userMessageString ' logged as user with id ' $user->getId();
  49.                 } else {
  50.                     $userMessageString ' by anonymous (not logged in) user ';
  51.                 }
  52.                 // Log the request about to be processed
  53.                 $this->logger->info(
  54.                     $controllerNameString .
  55.                     $actionNameString .
  56.                     $methodString .
  57.                     $requestParamsString .
  58.                     $getQueryString .
  59.                     $userMessageString
  60.                 );
  61.             }
  62.         } else {
  63.             $this->logger->info('Called controller as a closure');
  64.         }
  65.     }
  66.     public function onKernelResponse(ResponseEvent $event)
  67.     {
  68.         $response $event->getResponse();
  69.         if ($response !== null) {
  70.             if ($response->getStatusCode() >= 400) {
  71.                 // Get content info only on errors, which never expose sensitive information
  72.                 $errorMessageString ' and content: ' $response->getContent();
  73.             } else {
  74.                 $errorMessageString '';
  75.             }
  76.             $this->logger->info('Exited controller with status code ' .
  77.                 $response->getStatusCode() . $errorMessageString);
  78.         }
  79.     }
  80. }