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\Recorders\LogRecorder;
4
 
5
use Illuminate\Contracts\Foundation\Application;
6
use Illuminate\Log\Events\MessageLogged;
7
use Throwable;
8
 
9
class LogRecorder
10
{
11
    /** @var \Spatie\LaravelIgnition\Recorders\LogRecorder\LogMessage[] */
12
    protected array $logMessages = [];
13
 
14
    protected Application $app;
15
 
16
    protected ?int $maxLogs;
17
 
18
    public function __construct(Application $app, ?int $maxLogs = null)
19
    {
20
        $this->app = $app;
21
 
22
        $this->maxLogs = $maxLogs;
23
    }
24
 
25
    public function start(): self
26
    {
27
        /** @phpstan-ignore-next-line */
28
        $this->app['events']->listen(MessageLogged::class, [$this, 'record']);
29
 
30
        return $this;
31
    }
32
 
33
    public function record(MessageLogged $event): void
34
    {
35
        if ($this->shouldIgnore($event)) {
36
            return;
37
        }
38
 
39
        $this->logMessages[] = LogMessage::fromMessageLoggedEvent($event);
40
 
41
        if (is_int($this->maxLogs)) {
42
            $this->logMessages = array_slice($this->logMessages, -$this->maxLogs);
43
        }
44
    }
45
 
46
    /** @return array<array<int,string>> */
47
    public function getLogMessages(): array
48
    {
49
        return $this->toArray();
50
    }
51
 
52
    /** @return array<int, mixed> */
53
    public function toArray(): array
54
    {
55
        $logMessages = [];
56
 
57
        foreach ($this->logMessages as $log) {
58
            $logMessages[] = $log->toArray();
59
        }
60
 
61
        return $logMessages;
62
    }
63
 
64
    protected function shouldIgnore(mixed $event): bool
65
    {
66
        if (! isset($event->context['exception'])) {
67
            return false;
68
        }
69
 
70
        if (! $event->context['exception'] instanceof Throwable) {
71
            return false;
72
        }
73
 
74
        return true;
75
    }
76
 
77
    public function reset(): void
78
    {
79
        $this->logMessages = [];
80
    }
81
 
82
    public function getMaxLogs(): ?int
83
    {
84
        return $this->maxLogs;
85
    }
86
 
87
    public function setMaxLogs(?int $maxLogs): self
88
    {
89
        $this->maxLogs = $maxLogs;
90
 
91
        return $this;
92
    }
93
}