Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Spatie\LaravelIgnition\Support;
4
 
5
use InvalidArgumentException;
6
use Monolog\Handler\AbstractProcessingHandler;
7
use Monolog\Logger;
8
use Spatie\FlareClient\Flare;
9
use Spatie\FlareClient\Report;
10
use Throwable;
11
 
12
class FlareLogHandler extends AbstractProcessingHandler
13
{
14
    protected Flare $flare;
15
 
16
    protected SentReports $sentReports;
17
 
18
    protected int $minimumReportLogLevel = Logger::ERROR;
19
 
20
    public function __construct(Flare $flare, SentReports $sentReports, $level = Logger::DEBUG, $bubble = true)
21
    {
22
        $this->flare = $flare;
23
 
24
        $this->sentReports = $sentReports;
25
 
26
        parent::__construct($level, $bubble);
27
    }
28
 
29
    public function setMinimumReportLogLevel(int $level): void
30
    {
31
        if (! in_array($level, Logger::getLevels())) {
32
            throw new InvalidArgumentException('The given minimum log level is not supported.');
33
        }
34
 
35
        $this->minimumReportLogLevel = $level;
36
    }
37
 
38
    protected function write(array $record): void
39
    {
40
        if (! $this->shouldReport($record)) {
41
            return;
42
        }
43
        if ($this->hasException($record)) {
44
            $report = $this->flare->report($record['context']['exception']);
45
 
46
            if ($report) {
47
                $this->sentReports->add($report);
48
            }
49
 
50
            return;
51
        }
52
 
53
        if (config('flare.send_logs_as_events')) {
54
            if ($this->hasValidLogLevel($record)) {
55
                $this->flare->reportMessage(
56
                    $record['message'],
57
                    'Log ' . Logger::getLevelName($record['level']),
58
                    function (Report $flareReport) use ($record) {
59
                        foreach ($record['context'] as $key => $value) {
60
                            $flareReport->context($key, $value);
61
                        }
62
                    }
63
                );
64
            }
65
        }
66
    }
67
 
68
    /**
69
     * @param array<string, mixed> $report
70
     *
71
     * @return bool
72
     */
73
    protected function shouldReport(array $report): bool
74
    {
75
        if (! config('flare.key')) {
76
            return false;
77
        }
78
 
79
        return $this->hasException($report) || $this->hasValidLogLevel($report);
80
    }
81
 
82
    /**
83
     * @param array<string, mixed> $report
84
     *
85
     * @return bool
86
     */
87
    protected function hasException(array $report): bool
88
    {
89
        $context = $report['context'];
90
 
91
        return isset($context['exception']) && $context['exception'] instanceof Throwable;
92
    }
93
 
94
    /**
95
     * @param array<string, mixed> $report
96
     *
97
     * @return bool
98
     */
99
    protected function hasValidLogLevel(array $report): bool
100
    {
101
        return $report['level'] >= $this->minimumReportLogLevel;
102
    }
103
}