Logging::__invoke()   B
last analyzed

Complexity

Conditions 2
Paths 1

Size

Total Lines 31
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 31
ccs 0
cts 24
cp 0
rs 8.8571
c 0
b 0
f 0
cc 2
eloc 19
nc 1
nop 0
crap 6
1
<?php declare(strict_types = 1);
2
3
namespace Venta\Framework\Kernel\Bootstrap;
4
5
use Monolog\Handler\StreamHandler;
6
use Monolog\Logger;
7
use Monolog\Processor\PsrLogMessageProcessor;
8
use Monolog\Processor\WebProcessor;
9
use Psr\Log\LoggerInterface;
10
use Venta\Contracts\Config\Config;
11
use Venta\Framework\Kernel\AbstractKernelBootstrap;
12
13
/**
14
 * Class Logging
15
 *
16
 * @package Venta\Framework\Kernel\Bootstrap
17
 */
18
final class Logging extends AbstractKernelBootstrap
19
{
20
    /**
21
     * @inheritDoc
22
     */
23
    public function __invoke()
24
    {
25
        // todo: implement multi-channel configuration.
26
        $this->container()->factory(
27
            LoggerInterface::class, function (Config $config) {
28
29
            $handler = new StreamHandler(
30
                $this->kernel()->rootPath() . '/storage/logs/venta.log',
31
                $config->log_level ?? Logger::DEBUG
32
            );
33
34
            $handler->pushProcessor(new PsrLogMessageProcessor);
35
36
            if (!$this->kernel()->isCli()) {
37
                $handler->pushProcessor(new WebProcessor(null, [ // todo: make list configurable?
38
                    'url' => 'REQUEST_URI',
39
                    'ip' => 'REMOTE_ADDR',
40
                    'http_method' => 'REQUEST_METHOD',
41
                    'server' => 'SERVER_NAME',
42
                    'referrer' => 'HTTP_REFERER',
43
                    'user_agent' => 'HTTP_USER_AGENT',
44
                ]));
45
            }
46
47
            $logger = new Logger('venta');
48
            $logger->pushHandler($handler);
49
50
            return $logger;
51
52
        }, true);
53
    }
54
}
55