Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ContainerLogger
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 log
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3declare(strict_types=1);
4
5namespace Cosray;
6
7use Celemas\Container\Container;
8use Psr\Log\AbstractLogger;
9use Psr\Log\LoggerInterface as Logger;
10use Psr\Log\NullLogger;
11
12/** @internal */
13final class ContainerLogger extends AbstractLogger
14{
15    private NullLogger $fallback;
16
17    public function __construct(
18        private Container $container,
19    ) {
20        $this->fallback = new NullLogger();
21    }
22
23    /** @param array<string, mixed> $context */
24    public function log(mixed $level, string|\Stringable $message, array $context = []): void
25    {
26        if ($this->container->has(Logger::class)) {
27            $logger = $this->container->get(Logger::class);
28
29            if ($logger instanceof Logger && $logger !== $this) {
30                $logger->log($level, $message, $context);
31
32                return;
33            }
34        }
35
36        $this->fallback->log($level, $message, $context);
37    }
38}