Completed
Push — master ( dddca7...cf9d09 )
by GBProd
04:26
created

ElasticaLogger   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 155
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 15
c 1
b 0
f 0
lcom 1
cbo 1
dl 0
loc 155
ccs 46
cts 46
cp 1
rs 10

13 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A logQuery() 0 23 3
A getNbQueries() 0 4 1
A getQueries() 0 4 1
A emergency() 0 4 1
A alert() 0 4 1
A critical() 0 4 1
A error() 0 4 1
A warning() 0 4 1
A notice() 0 4 1
A info() 0 4 1
A debug() 0 4 1
A log() 0 4 1
1
<?php
2
3
namespace GBProd\ElasticaBundle\Logger;
4
5
use Psr\Log\LoggerInterface;
6
7
/**
8
 * Logger for the Elastica.
9
 *
10
 * The {@link logQuery()} method is configured as the logger callable in the
11
 * service container.
12
 *
13
 * @author Gordon Franke <[email protected]>
14
 */
15
class ElasticaLogger implements LoggerInterface
16
{
17
    /**
18
     * @var LoggerInterface
19
     */
20
    protected $logger;
21
22
    /**
23
     * @var array
24
     */
25
    protected $queries = array();
26
27
    /**
28
     * @var boolean
29
     */
30
    protected $debug;
31
32
    /**
33
     * Constructor.
34
     *
35
     * @param LoggerInterface|null $logger The Symfony logger
36
     * @param boolean              $debug
37
     */
38 15
    public function __construct(LoggerInterface $logger = null, $debug = false)
39
    {
40 15
        $this->logger = $logger;
41 15
        $this->debug = $debug;
42 15
    }
43
44
    /**
45
     * Logs a query.
46
     *
47
     * @param string $path       Path to call
48
     * @param string $method     Rest method to use (GET, POST, DELETE, PUT)
49
     * @param array  $data       Arguments
50
     * @param float  $time       Execution time
51
     * @param array  $connection Host, port, transport, and headers of the query
52
     * @param array  $query      Arguments
53
     */
54 4
    public function logQuery($path, $method, $data, $time, $connection = array(), $query = array(), $engineTime = 0, $itemCount = 0)
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 120 characters; contains 132 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
55
    {
56 4
        if ($this->debug) {
57 2
            $e = new \Exception();
0 ignored issues
show
Comprehensibility introduced by
Avoid variables with short names like $e. Configured minimum length is 2.

Short variable names may make your code harder to understand. Variable names should be self-descriptive. This check looks for variable names who are shorter than a configured minimum.

Loading history...
58
59 2
            $this->queries[] = array(
60 2
                'path' => $path,
61 2
                'method' => $method,
62 2
                'data' => $data,
63 2
                'executionMS' => $time,
64 2
                'engineMS' => $engineTime,
65 2
                'connection' => $connection,
66 2
                'queryString' => $query,
67 2
                'itemCount' => $itemCount,
68 2
                'backtrace' => $e->getTraceAsString()
69 2
            );
70 2
        }
71
72 4
        if (null !== $this->logger) {
73 1
            $message = sprintf("%s (%s) %0.2f ms", $path, $method, $time * 1000);
0 ignored issues
show
Coding Style Comprehensibility introduced by
The string literal %s (%s) %0.2f ms does not require double quotes, as per coding-style, please use single quotes.

PHP provides two ways to mark string literals. Either with single quotes 'literal' or with double quotes "literal". The difference between these is that string literals in double quotes may contain variables with are evaluated at run-time as well as escape sequences.

String literals in single quotes on the other hand are evaluated very literally and the only two characters that needs escaping in the literal are the single quote itself (\') and the backslash (\\). Every other character is displayed as is.

Double quoted string literals may contain other variables or more complex escape sequences.

<?php

$singleQuoted = 'Value';
$doubleQuoted = "\tSingle is $singleQuoted";

print $doubleQuoted;

will print an indented: Single is Value

If your string literal does not contain variables or escape sequences, it should be defined using single quotes to make that fact clear.

For more information on PHP string literals and available escape sequences see the PHP core documentation.

Loading history...
74 1
            $this->logger->info($message, (array) $data);
75 1
        }
76 4
    }
77
78
    /**
79
     * Returns the number of queries that have been logged.
80
     *
81
     * @return integer The number of queries logged
82
     */
83 3
    public function getNbQueries()
84
    {
85 3
        return count($this->queries);
86
    }
87
88
    /**
89
     * Returns a human-readable array of queries logged.
90
     *
91
     * @return array An array of queries
92
     */
93 1
    public function getQueries()
94
    {
95 1
        return $this->queries;
96
    }
97
98
    /**
99
     * {@inheritdoc}
100
     */
101 1
    public function emergency($message, array $context = array())
102
    {
103 1
        return $this->logger->emergency($message, $context);
104
    }
105
106
    /**
107
     * {@inheritdoc}
108
     */
109 1
    public function alert($message, array $context = array())
110
    {
111 1
        return $this->logger->alert($message, $context);
112
    }
113
114
    /**
115
     * {@inheritdoc}
116
     */
117 1
    public function critical($message, array $context = array())
118
    {
119 1
        return $this->logger->critical($message, $context);
120
    }
121
122
    /**
123
     * {@inheritdoc}
124
     */
125 1
    public function error($message, array $context = array())
126
    {
127 1
        return $this->logger->error($message, $context);
128
    }
129
130
    /**
131
     * {@inheritdoc}
132
     */
133 1
    public function warning($message, array $context = array())
134
    {
135 1
        return $this->logger->warning($message, $context);
136
    }
137
138
    /**
139
     * {@inheritdoc}
140
     */
141 1
    public function notice($message, array $context = array())
142
    {
143 1
        return $this->logger->notice($message, $context);
144
    }
145
146
    /**
147
     * {@inheritdoc}
148
     */
149 1
    public function info($message, array $context = array())
150
    {
151 1
        return $this->logger->info($message, $context);
152
    }
153
154
    /**
155
     * {@inheritdoc}
156
     */
157 1
    public function debug($message, array $context = array())
158
    {
159 1
        return $this->logger->debug($message, $context);
160
    }
161
162
    /**
163
     * {@inheritdoc}
164
     */
165 1
    public function log($level, $message, array $context = array())
166
    {
167 1
        return $this->logger->log($level, $message, $context);
168
    }
169
}