-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Record.php
114 lines (89 loc) · 2.34 KB
/
Record.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
declare(strict_types=1);
namespace SonsOfPHP\Component\Logger;
use DateTimeImmutable;
use SonsOfPHP\Contract\Logger\ContextInterface;
use SonsOfPHP\Contract\Logger\LevelInterface;
use SonsOfPHP\Contract\Logger\RecordInterface;
use Stringable;
/**
* @author Joshua Estes <[email protected]>
*/
final class Record implements RecordInterface
{
public function __construct(
private string $channel,
private LevelInterface $level,
private string|Stringable $message,
private ContextInterface $context,
private DateTimeImmutable $datetime = new DateTimeImmutable(),
) {}
public function getChannel(): string
{
return $this->channel;
}
public function withChannel(string $channel): static
{
if ($this->channel === $channel) {
return $this;
}
$that = clone $this;
$that->channel = $channel;
return $that;
}
public function getLevel(): LevelInterface
{
return $this->level;
}
public function withLevel(LevelInterface $level): static
{
if ($this->level === $level) {
return $this;
}
$that = clone $this;
$that->level = $level;
return $that;
}
public function getMessage(): string
{
return $this->message;
}
public function withMessage(string $message): static
{
if ($this->message === $message) {
return $this;
}
$that = clone $this;
$that->message = $message;
return $that;
}
public function getContext(): ContextInterface
{
return $this->context;
}
public function withContext(array|ContextInterface $context): static
{
if (is_array($context)) {
$context = new Context($context);
}
if ($this->context->all() === $context->all()) {
return $this;
}
$that = clone $this;
$that->context = $context;
return $that;
}
public function getDatetime(): DateTimeImmutable
{
return $this->datetime;
}
public function withDatetime(DateTimeImmutable $datetime): static
{
if ($this->datetime === $datetime) {
return $this;
}
$that = clone $this;
$that->datetime = $datetime;
return $that;
}
}