Log::reloadStorage()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 2
nop 0
dl 0
loc 9
rs 10
c 0
b 0
f 0
ccs 6
cts 6
cp 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SimpleLog;
6
7
use Psr\Log\LoggerInterface;
8
use Psr\Log\LoggerTrait;
9
use Psr\Log\LogLevel;
10
use Psr\Log\InvalidArgumentException;
11
use SimpleLog\Storage\StorageInterface;
12
use SimpleLog\Message\MessageInterface;
13
use SimpleLog\Storage\File;
14
use SimpleLog\Message\DefaultMessage;
15
16
class Log implements LogInterface, LoggerInterface
17
{
18 1
    use LoggerTrait;
19
20
    /**
21
     * @var array
22
     */
23
    protected $defaultParams = [
24
        'log_path' => './log',
25
        'level' => 'notice',
26
        'storage' => File::class,
27
        'message' => DefaultMessage::class,
28
    ];
29
30
    /**
31
     * @var StorageInterface
32
     */
33
    protected $storage;
34
35
    /**
36
     * @var array
37
     */
38
    protected $levels = [];
39
40
    /**
41
     * @var MessageInterface
42
     */
43
    protected $message;
44
45
    /**
46
     * @var MessageInterface
47
     */
48
    protected $lastMessage;
49
50
    /**
51
     * @param array $params
52
     */
53 12
    public function __construct(array $params = [])
54
    {
55 12
        $this->defaultParams = \array_merge($this->defaultParams, $params);
56
57 12
        $levels = new \ReflectionClass(new LogLevel());
58 12
        $this->levels = $levels->getConstants();
59
60 12
        $this->reloadStorage();
61 12
        $this->reloadMessage();
62 12
    }
63
64
    /**
65
     * log event information into file
66
     *
67
     * @param array|string|object $message
68
     * @param array $context
69
     * @return $this
70
     */
71 11
    public function makeLog($message, array $context = []): LogInterface
72
    {
73 11
        $this->log($this->defaultParams['level'], $message, $context);
74
75 10
        return $this;
76
    }
77
78
    /**
79
     * @param string $level
80
     * @param string|array|object $message
81
     * @param array $context
82
     * @throws InvalidArgumentException
83
     */
84 13
    public function log($level, $message, array $context = [])
85
    {
86 13
        if (!\in_array($level, $this->levels, true)) {
87 1
            throw new InvalidArgumentException('Level not defined: ' . $level);
88
        }
89
90 12
        $newMessage = $this->message
91 12
            ->createMessage($message, $context)
92 11
            ->getMessage();
93
94 11
        $this->storage->store($newMessage, $level);
95 11
        $this->lastMessage = $this->message;
96 11
        $this->reloadMessage();
97 11
    }
98
99
    /**
100
     * @return $this
101
     */
102 13
    protected function reloadStorage(): LogInterface
103
    {
104 13
        if ($this->defaultParams['storage'] instanceof StorageInterface) {
105 1
            $this->storage = $this->defaultParams['storage'];
106 1
            return $this;
107
        }
108
109 12
        $this->storage = new $this->defaultParams['storage']($this->defaultParams);
110 12
        return $this;
111
    }
112
113
    /**
114
     * @return $this
115
     */
116 13
    protected function reloadMessage(): LogInterface
117
    {
118 13
        if ($this->defaultParams['message'] instanceof MessageInterface) {
119 1
            $this->message = $this->defaultParams['message'];
120 1
            return $this;
121
        }
122
123 12
        $this->message = new $this->defaultParams['message']($this->defaultParams);
124 12
        return $this;
125
    }
126
127
    /**
128
     * set log option for all future executions of makeLog
129
     *
130
     * @param string $key
131
     * @param mixed $val
132
     * @return $this
133
     */
134 3
    public function setOption(string $key, $val): LogInterface
135
    {
136 3
        $this->defaultParams[$key] = $val;
137 3
        return $this->reloadStorage();
138
    }
139
140
    /**
141
     * return all configuration or only given key value
142
     *
143
     * @param null|string $key
144
     * @return array|mixed
145
     */
146 3
    public function getOption(?string $key = null)
147
    {
148 3
        if ($key === null) {
149 1
            return $this->defaultParams;
150
        }
151
152 3
        return $this->defaultParams[$key];
153
    }
154
155
    /**
156
     * @return string
157
     */
158 1
    public function getLastMessage(): string
159
    {
160 1
        return $this->lastMessage->getMessage();
161
    }
162
}
163