Completed
Pull Request — master (#1149)
by Oleg
06:13
created

ElasticaLogger::error()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 2
crap 1
1
<?php
2
3
namespace FOS\ElasticaBundle\Logger;
4
5
use Psr\Log\AbstractLogger;
6
use Psr\Log\LoggerInterface;
7
8
/**
9
 * Logger for the Elastica.
10
 *
11
 * The {@link logQuery()} method is configured as the logger callable in the
12
 * service container.
13
 *
14
 * @author Gordon Franke <[email protected]>
15
 */
16
class ElasticaLogger extends AbstractLogger
17
{
18
    /**
19
     * @var LoggerInterface
20
     */
21
    protected $logger;
22
23
    /**
24
     * @var array
25
     */
26
    protected $queries = array();
27
28
    /**
29
     * @var boolean
30
     */
31
    protected $debug;
32
33
    /**
34
     * Constructor.
35
     *
36
     * @param LoggerInterface|null $logger The Symfony logger
37
     * @param boolean              $debug
38
     */
39 28
    public function __construct(LoggerInterface $logger = null, $debug = false)
40
    {
41 28
        $this->logger = $logger;
42 28
        $this->debug = $debug;
43 28
    }
44
45
    /**
46
     * Logs a query.
47
     *
48
     * @param string $path Path to call
49
     * @param string $method Rest method to use (GET, POST, DELETE, PUT)
50
     * @param array  $data Arguments
51
     * @param float  $queryTime Execution time (in seconds)
52
     * @param array  $connection Host, port, transport, and headers of the query
53
     * @param array  $query Arguments
54
     * @param int    $engineTime
55
     * @param int    $itemCount
56
     */
57 13
    public function logQuery($path, $method, $data, $queryTime, $connection = array(), $query = array(), $engineTime = 0, $itemCount = 0)
58
    {
59 13
        $executionMS = $queryTime * 1000;
60
61 13
        if ($this->debug) {
62 11
            $e = new \Exception();
63 11
            $this->queries[] = array(
64 11
                'path' => $path,
65 11
                'method' => $method,
66 11
                'data' => $data,
67 11
                'executionMS' => $executionMS,
68 11
                'engineMS' => $engineTime,
69 11
                'connection' => $connection,
70 11
                'queryString' => $query,
71 11
                'itemCount' => $itemCount,
72 11
                'backtrace' => $e->getTraceAsString()
73
            );
74
        }
75
76 13
        if (null !== $this->logger) {
77 10
            $message = sprintf("%s (%s) %0.2f ms", $path, $method, $executionMS);
78 10
            $this->logger->info($message, (array) $data);
79
        }
80 13
    }
81
82
    /**
83
     * Returns the number of queries that have been logged.
84
     *
85
     * @return integer The number of queries logged
86
     */
87 3
    public function getNbQueries()
88
    {
89 3
        return count($this->queries);
90
    }
91
92
    /**
93
     * Returns a human-readable array of queries logged.
94
     *
95
     * @return array An array of queries
96
     */
97 1
    public function getQueries()
98
    {
99 1
        return $this->queries;
100
    }
101
102
    /**
103
     * {@inheritdoc}
104
     */
105 18
    public function log($level, $message, array $context = array())
106
    {
107 18
        return $this->logger->log($level, $message, $context);
108
    }
109
}
110