src/EventSubscriber/LoggerSubscriber.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  5. use Psr\Log\LoggerInterface;
  6. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  7. class LoggerSubscriber
  8. {
  9. protected $tokenStorage;
  10. protected $logger;
  11. public function __construct(TokenStorageInterface $tokenStorage, LoggerInterface $logger)
  12. {
  13. $this->tokenStorage = $tokenStorage;
  14. $this->logger = $logger;
  15. }
  16. public function onKernelResponse(ResponseEvent $event)
  17. {
  18. $response = $event->getResponse();
  19. $request = $event->getRequest();
  20. $checkPath = '/api';
  21. if (strpos($request->getRequestUri(), $checkPath) !== 0) {
  22. return;
  23. }
  24. $this->logger->debug("***** LoggerListener API event to be logged found");
  25. $timestamp = date("Y-m-d H:i:s");
  26. $method = $request->getMethod();
  27. $action = $request->getPathInfo();
  28. $ip = $event->getRequest()->getClientIp();
  29. $user = 'Unknown';
  30. $token = $this->tokenStorage->getToken();
  31. if (null !== $token) {
  32. $user = $token->getUser();
  33. if ($user instanceof User) {
  34. $user = $user->getId();
  35. }
  36. }
  37. $statusCode = $response->getStatusCode();
  38. $this->logger->debug(sprintf("%s user-%s [%s] \"%s %s %s\"", $ip, $user, $timestamp, $method, $action, $statusCode));
  39. }
  40. }