Passed
Push — master ( 89f24e...8c4dad )
by Sylvain
08:05
created

LoggerFactory   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 15
c 3
b 0
f 0
dl 0
loc 36
ccs 14
cts 14
cp 1
rs 10
wmc 3

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 26 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Ecodev\Felix\Log;
6
7
use Ecodev\Felix\Log\Writer\Db;
8
use Ecodev\Felix\Log\Writer\Mail;
9
use Interop\Container\ContainerInterface;
10
use Laminas\Log\Logger;
11
use Laminas\Log\Writer\Stream;
12
use Laminas\ServiceManager\Factory\FactoryInterface;
13
14
final class LoggerFactory implements FactoryInterface
15
{
16
    /**
17
     * @var null|Logger
18
     */
19
    private $logger;
20
21
    /**
22
     * @param string $requestedName
23
     */
24 2
    public function __invoke(ContainerInterface $container, $requestedName, ?array $options = null): Logger
25
    {
26 2
        if (!$this->logger) {
27 2
            $this->logger = new Logger();
28
29
            // Log to file
30 2
            $fileWriter = new Stream('logs/all.log');
31 2
            $this->logger->addWriter($fileWriter);
32
33
            // Log to DB
34 2
            $dbWriter = $container->get(Db::class);
35 2
            $dbWriter->addFilter(Logger::INFO);
36 2
            $this->logger->addWriter($dbWriter);
37
38
            // Maybe log to emails
39 2
            $mailWriter = $container->get(Mail::class);
40 2
            if ($mailWriter) {
41 1
                $this->logger->addWriter($mailWriter);
42
            }
43
44
            // Register to log all kind of PHP errors
45 2
            Logger::registerErrorHandler($this->logger, true);
46 2
            Logger::registerFatalErrorShutdownFunction($this->logger);
47
        }
48
49 2
        return $this->logger;
50
    }
51
}
52