vendor/friendsofsymfony/elastica-bundle/src/Logger/ElasticaLogger.php line 25

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the FOSElasticaBundle package.
  4.  *
  5.  * (c) FriendsOfSymfony <https://friendsofsymfony.github.com/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace FOS\ElasticaBundle\Logger;
  11. use Psr\Log\AbstractLogger;
  12. use Psr\Log\LoggerInterface;
  13. /**
  14.  * Logger for the Elastica.
  15.  *
  16.  * The {@link logQuery()} method is configured as the logger callable in the
  17.  * service container.
  18.  *
  19.  * @author Gordon Franke <info@nevalon.de>
  20.  */
  21. class ElasticaLogger extends AbstractLogger
  22. {
  23.     protected ?LoggerInterface $logger;
  24.     protected array $queries = [];
  25.     protected bool $debug;
  26.     public function __construct(?LoggerInterface $logger nullbool $debug false)
  27.     {
  28.         $this->logger $logger;
  29.         $this->debug $debug;
  30.     }
  31.     /**
  32.      * Logs a query.
  33.      *
  34.      * @param string       $path       Path to call
  35.      * @param string       $method     Rest method to use (GET, POST, DELETE, PUT)
  36.      * @param array|string $data       Arguments
  37.      * @param float        $queryTime  Execution time (in seconds)
  38.      * @param array        $connection Host, port, transport, and headers of the query
  39.      * @param array        $query      Arguments
  40.      * @param int          $engineTime
  41.      */
  42.     public function logQuery(string $pathstring $method$data$queryTime$connection = [], $query = [], $engineTime 0int $itemCount 0)
  43.     {
  44.         $executionMS $queryTime 1000;
  45.         if ($this->debug) {
  46.             $e = new \Exception();
  47.             if (\is_string($data)) {
  48.                 $jsonStrings \explode("\n"$data);
  49.                 $data = [];
  50.                 foreach ($jsonStrings as $json) {
  51.                     if ('' != $json) {
  52.                         $data[] = \json_decode($jsontrue);
  53.                     }
  54.                 }
  55.             } else {
  56.                 $data = [$data];
  57.             }
  58.             $this->queries[] = [
  59.                 'path' => $path,
  60.                 'method' => $method,
  61.                 'data' => $data,
  62.                 'executionMS' => $executionMS,
  63.                 'engineMS' => $engineTime,
  64.                 'connection' => $connection,
  65.                 'queryString' => $query,
  66.                 'itemCount' => $itemCount,
  67.                 'backtrace' => $e->getTraceAsString(),
  68.             ];
  69.         }
  70.         if (null !== $this->logger) {
  71.             $message \sprintf('%s (%s) %0.2f ms'$path$method$executionMS);
  72.             $this->logger->info($message, (array) $data);
  73.         }
  74.     }
  75.     /**
  76.      * Returns the number of queries that have been logged.
  77.      */
  78.     public function getNbQueries(): int
  79.     {
  80.         return \count($this->queries);
  81.     }
  82.     /**
  83.      * Returns a human-readable array of queries logged.
  84.      */
  85.     public function getQueries(): array
  86.     {
  87.         return $this->queries;
  88.     }
  89.     /**
  90.      * {@inheritdoc}
  91.      */
  92.     public function log($level$message, array $context = []): void
  93.     {
  94.         $this->logger->log($level$message$context);
  95.     }
  96.     public function reset(): void
  97.     {
  98.         $this->queries = [];
  99.     }
  100. }