Test Setup Failed
Push — master ( a11866...358c21 )
by Dominik
02:10
created

getMonologHandlersServiceDefinition()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1.037

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 6
ccs 2
cts 3
cp 0.6667
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
crap 1.037
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * (c) Fabien Potencier <[email protected]> (https://github.com/silexphp/Silex-Providers)
7
 */
8
9
namespace Chubbyphp\ServiceProvider;
10
11
use Monolog\Formatter\LineFormatter;
12
use Monolog\Handler\GroupHandler;
13
use Monolog\Handler\StreamHandler;
14
use Monolog\Logger;
15
use Pimple\Container;
16
17
final class MonologServiceProvider
18
{
19
    /**
20
     * @param Container $container
21 1
     */
22 1
    public function register(Container $container)
23
    {
24
        $container['logger'] = $this->getLoggerServiceDefinition($container);
25 1
        $container['monolog'] = $this->getMonologServiceDefinition($container);
26 1
        $container['monolog.formatter'] = $this->getMonologFormatterServiceDefinition($container);
27 1
        $container['monolog.default_handler'] = $this->getMonologDefaultHandlerServiceDefinition($container);
28
        $container['monolog.handlers'] = $this->getMonologHandlersServiceDefinition($container);
29 1
        $container['monolog.level'] = Logger::DEBUG;
30
        $container['monolog.name'] = 'app';
31
        $container['monolog.bubble'] = true;
32 1
        $container['monolog.permission'] = null;
33 1
    }
34
35
    /**
36 1
     * @param Container $container
37 1
     *
38
     * @return \Closure
39 1
     */
40 1
    private function getLoggerServiceDefinition(Container $container): \Closure
41 1
    {
42 1
        return function () use ($container) {
43 1
            return $container['monolog'];
44
        };
45
    }
46 1
47
    /**
48 1
     * @param Container $container
49 1
     *
50
     * @return \Closure
51 1
     */
52 1
    private function getMonologServiceDefinition(Container $container): \Closure
0 ignored issues
show
Unused Code introduced by
The parameter $container is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
53
    {
54
        return function ($container) {
55 1
            $log = new Logger($container['monolog.name']);
56 1
            $log->pushHandler(new GroupHandler($container['monolog.handlers']));
57
58
            return $log;
59 1
        };
60
    }
61
62 1
    /**
63 1
     * @param Container $container
64
     *
65
     * @return \Closure
66 1
     */
67 1
    private function getMonologFormatterServiceDefinition(Container $container): \Closure
0 ignored issues
show
Unused Code introduced by
The parameter $container is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
68 1
    {
69 1
        return function () {
70
            return new LineFormatter();
71
        };
72
    }
73
74
    /**
75
     * @param Container $container
76 1
     *
77
     * @return \Closure
78
     */
79 1
    private function getMonologHandlersServiceDefinition(Container $container): \Closure
80 1
    {
81
        return function () use ($container) {
82
            return [$container['monolog.default_handler']];
83
        };
84
    }
85
86
    /**
87
     * @param Container $container
88
     *
89
     * @return \Closure
90
     */
91
    private function getMonologDefaultHandlerServiceDefinition(Container $container): \Closure
92
    {
93
        return function () use ($container) {
94
            $handler = new StreamHandler(
95
                $container['monolog.logfile'],
96
                MonologServiceProvider::translateLevel($container['monolog.level']),
97
                $container['monolog.bubble'],
98
                $container['monolog.permission']
99
            );
100
101
            $handler->setFormatter($container['monolog.formatter']);
102
103
            return $handler;
104
        };
105
    }
106
107
    /**
108
     * @param int|string $name
109
     *
110
     * @return int
111
     */
112
    public static function translateLevel($name): int
113
    {
114
        // level is already translated to logger constant, return as-is
115
        if (is_int($name)) {
116
            return $name;
117
        }
118
119
        $psrLevel = Logger::toMonologLevel($name);
120
121
        if (is_int($psrLevel)) {
122
            return $psrLevel;
123
        }
124
125
        $levels = Logger::getLevels();
126
        $upper = strtoupper($name);
127
128
        if (!isset($levels[$upper])) {
129
            throw new \InvalidArgumentException(
130
                "Provided logging level '$name' does not exist. Must be a valid monolog logging level."
131
            );
132
        }
133
134
        return $levels[$upper];
135
    }
136
}
137