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
115
116
117
118
119
120
121
122
123
124
125
126
127
|
<?php
namespace Asko\Loggr;
use DateTime;
/**
* @author Asko Nõmm <asko@faultd.com>
*/
enum Format
{
case JSON;
case IntelliJ;
case Laravel;
case Symfony;
/**
* Serializes the given message into a format based on the type of serialization.
*
* @param Message $message The message to be serialized.
* @return string The serialized message.
*/
public function serialize(Message $message, DateTime $dateTime = new DateTime): string
{
return match($this) {
self::JSON => $this->serializeJson($message, $dateTime),
self::IntelliJ => $this->serializeIntelliJ($message, $dateTime),
self::Laravel => $this->serializeLaravel($message, $dateTime),
self::Symfony => $this->serializeSymfony($message, $dateTime),
};
}
/**
* Serializes the given message into JSON format.
*
* @param Message $message The message to be serialized.
* @return string The JSON-encoded message.
*/
private function serializeJson(Message $message, DateTime $dateTime): string
{
/** @var string $trace_file */
$trace_file = $message->trace['file'];
/** @var string $trace_line */
$trace_line = $message->trace['line'];
$json = json_encode([
'date' => $dateTime->format('Y-m-d H:i:s'),
'level' => strtoupper($message->level->value),
'message' => $message->content,
'context' => $message->context,
'trace' => [
'file' => pathinfo($trace_file, PATHINFO_FILENAME),
'line' => $trace_line,
],
]);
if (!$json) {
return '';
}
return $json;
}
/**
* Serializes the given message into a Laravel log format.
*
* @param Message $message The message to be serialized.
* @return string The serialized message.
*/
private function serializeLaravel(Message $message, DateTime $dateTime): string
{
/** @var string $trace_file */
$trace_file = $message->trace['file'];
$datetime = $dateTime->format('Y-m-d H:i:s');
$filename = pathinfo($trace_file, PATHINFO_FILENAME);
$level = strtoupper($message->level->value);
$content = !empty($message->content) ? "$message->content " : "";
$context = isset($message->context) ? json_encode($message->context) : '';
return trim("[$datetime] $filename.$level: $content$context");
}
/**
* Serialized the given message into a Symfony log format.
*
* @param Message $message The message object that contains log details.
* @return string The formatted log string.
*/
private function serializeSymfony(Message $message, DateTime $dateTime): string
{
/** @var string $trace_file */
$trace_file = $message->trace['file'];
// Date
$datetime = $dateTime->format('Y-m-d\TH:i:s.uP');
$filename = pathinfo($trace_file, PATHINFO_FILENAME);
$level = strtoupper($message->level->value);
$content = !empty($message->content) ? "$message->content " : "";
$context = isset($message->context) ? json_encode($message->context) : '';
return trim("[$datetime] $filename.$level: $content$context");
}
/**
* Serializes the given message into a IntelliJ log format.
*
* @param Message $message The message object that contains log details.
* @return string The formatted log string.
*/
private function serializeIntelliJ(Message $message, DateTime $dateTime): string
{
/** @var string $trace_file */
$trace_file = $message->trace['file'];
/** @var string $trace_line */
$trace_line = $message->trace['line'];
// Date
$datetime = $dateTime->format('Y-m-d H:i:s');
$level = strtoupper($message->level->value);
$filename = pathinfo($trace_file, PATHINFO_FILENAME);
$content = !empty($message->content) ? "$message->content " : "";
$context = isset($message->context) ? json_encode($message->context) : '';
return trim("$datetime [$trace_line] $level - $filename - $content$context");
}
}
|