BugsnagLogger   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Importance

Changes 5
Bugs 0 Features 1
Metric Value
eloc 33
c 5
b 0
f 1
dl 0
loc 68
rs 10
wmc 15

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getBugsnag() 0 3 1
A write() 0 21 4
B levelToSeverity() 0 16 9
1
<?php
2
3
namespace Violet88\BugsnagModule;
4
5
use Monolog\Handler\AbstractProcessingHandler;
6
use Monolog\Logger;
7
8
class BugsnagLogger extends AbstractProcessingHandler
9
{
10
    private Bugsnag $bugsnag;
11
12
    public function __construct(Bugsnag $client, $level = Logger::WARNING, $bubble = true)
13
    {
14
        parent::__construct($level, $bubble);
15
        $this->bugsnag = $client;
16
    }
17
18
19
    /**
20
     * Function that gets called when a log is getting written. This function will send the log to Bugsnag.
21
     *
22
     * @param array $record
23
     * @return void
24
     */
25
    protected function write($record): void
26
    {
27
        if (isset($record['context'])) {
28
            if (!isset($record['context']['exception'])) {
29
                $this->getBugsnag()->sendError($record['message']);
30
                return;
31
            }
32
            //check if $record['context']['exception'] is an instance of \Exception
33
            if ($record['context']['exception'] instanceof \Exception) {
34
                $this->getBugsnag()
35
                    ->addUserInfo()
36
                    ->addPackagesWithVersions()
37
                    ->sendException(
38
                        $record['context']['exception'],
39
                        $this->levelToSeverity($record['level']),
40
                        true,
41
                        false
42
                    );
43
                return;
44
            }
45
            $this->getBugsnag()->sendError($record['message']);
46
        }
47
    }
48
49
    public function getBugsnag(): Bugsnag
50
    {
51
        return $this->bugsnag;
52
    }
53
54
    /**
55
     * Convert Monolog Level to Bugsnag Severity.
56
     *
57
     * @param int $level
58
     * @return string
59
     */
60
    private function levelToSeverity($level)
61
    {
62
        switch ($level) {
63
            case 100:
64
            case 200:
65
            case 250:
66
                return Severity::INFO;
67
            case 300:
68
                return Severity::WARNING;
69
            case 400:
70
            case 500:
71
            case 550:
72
            case 600:
73
                return Severity::ERROR;
74
        }
75
        return Severity::INFO;
76
    }
77
}
78