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

LoggerFactory::__invoke()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 26
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 3

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 3
eloc 13
c 3
b 0
f 0
nc 3
nop 3
dl 0
loc 26
ccs 14
cts 14
cp 1
crap 3
rs 9.8333
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