ErrorLogger   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 25
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 2
dl 0
loc 25
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A __invoke() 0 10 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BEAR\Package\Provide\Error;
6
7
use BEAR\AppMeta\AbstractAppMeta;
8
use BEAR\Sunday\Extension\Router\RouterMatch;
9
use Monolog\Logger;
10
use Psr\Log\LoggerInterface;
11
use Throwable;
12
13
use function get_class;
14
use function sprintf;
15
16
final class ErrorLogger
17
{
18
    /** @var LoggerInterface */
19
    private $logger;
20
21
    /** @var AbstractAppMeta */
22
    private $appMeta;
23
24
    public function __construct(LoggerInterface $logger, AbstractAppMeta $appMeta)
25
    {
26
        $this->logger = $logger;
27
        $this->appMeta = $appMeta;
28
    }
29
30
    public function __invoke(Throwable $e, RouterMatch $request): string
31
    {
32
        $level = $e->getCode() >= 500 ? Logger::ERROR : Logger::DEBUG;
33
        $logRef = new LogRef($e);
34
        $message = sprintf('req:"%s" code:%s e:%s(%s) logref:%s', (string) $request, $e->getCode(), get_class($e), $e->getMessage(), (string) $logRef);
35
        $this->logger->log($level, $message);
36
        $logRef->log($e, $request, $this->appMeta);
37
38
        return (string) $logRef;
39
    }
40
}
41