MonologExtension   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 20
c 0
b 0
f 0
dl 0
loc 41
rs 10
wmc 8

2 Methods

Rating   Name   Duplication   Size   Complexity  
A registerServices() 0 22 6
A getDefinitionFrom() 0 6 2
1
<?php
2
3
namespace pjpawel\LightApi\Component\Logger;
4
5
use pjpawel\LightApi\Component\Extension\Extension;
6
use pjpawel\LightApi\Container\ContainerLoader;
7
use pjpawel\LightApi\Exception\ProgrammerException;
8
9
class MonologExtension extends Extension
10
{
11
12
    private const CONTAINER_PREFIX = 'monolog.';
13
14
    public function registerServices(ContainerLoader $container): void
15
    {
16
        /** @var array<string, MonologLoggerDefinition> $definitions */
17
        $definitions = [];
18
        foreach ($this->config as $loggerName => $loggerConfig) {
19
            if (isset($loggerConfig['class']) && str_starts_with($loggerConfig['class'], '@')) {
20
                $loggerName = substr($loggerConfig['class'], 1);
21
                $definition = $this->getDefinitionFrom($definitions, $loggerName);
22
                $aliasHandlers = $definition->handlers;
23
                $aliasProcessors = $definition->processors;
24
            }
25
            $handlers = $loggerConfig['handlers'];
26
            $processors = $loggerConfig['processors'];
27
            if (isset($aliasHandlers)) {
28
                $handlers += $aliasHandlers;
29
            }
30
            if (isset($aliasProcessors)) {
31
                $processors += $aliasProcessors;
32
            }
33
            $definitions[self::CONTAINER_PREFIX . $loggerName] = new MonologLoggerDefinition($loggerName, $handlers, $processors);
34
        }
35
        $container->addDefinitions($definitions);
36
    }
37
38
    /**
39
     * @param array<string,MonologLoggerDefinition> $definitions
40
     * @param string $loggerName
41
     * @return MonologLoggerDefinition
42
     * @throws ProgrammerException
43
     */
44
    private function getDefinitionFrom(array $definitions, string $loggerName): MonologLoggerDefinition
45
    {
46
        if (isset($definitions[self::CONTAINER_PREFIX . $loggerName])) {
47
            return $definitions[self::CONTAINER_PREFIX . $loggerName];
48
        }
49
        throw new ProgrammerException('Cannot find logger definition of ' . $loggerName);
50
    }
51
52
}