Skip to content

Commit 4ba9592

Browse files
committed
Add formatter that is optimized for DD ingress
1 parent 2b9cb0a commit 4ba9592

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

src/Formatter/DataDogFormatter.php

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Stefna\Logger\Formatter;
4+
5+
use Monolog\Formatter\JsonFormatter;
6+
use Monolog\LogRecord;
7+
8+
final class DataDogFormatter extends JsonFormatter
9+
{
10+
protected function normalizeRecord(LogRecord $record): array
11+
{
12+
/**
13+
* @var array{
14+
* context: array{
15+
* "error.kind"?: string,
16+
* "error.message": string,
17+
* "error.stack": string,
18+
* exception?: mixed,
19+
* },
20+
* ddsource?: string,
21+
* ddtags?: string,
22+
* logger?: mixed
23+
* } $data
24+
*/
25+
$data = parent::normalizeRecord($record);
26+
/**
27+
* @var array{
28+
* exception?: mixed,
29+
* "error.kind"?: string,
30+
* ddtags?: string,
31+
* traceId?: string,
32+
* } $context
33+
*/
34+
$context = $record->context;
35+
36+
if (isset($data['context']['error.kind'])) {
37+
$data['error'] = [
38+
'message' => $data['context']['error.message'],
39+
'stack' => $data['context']['error.stack'],
40+
'kind' => $data['context']['error.kind'],
41+
];
42+
unset($data['context']['error.kind'], $data['context']['error.message'], $data['context']['error.stack']);
43+
}
44+
elseif (isset($context['exception']) && $context['exception'] instanceof \Throwable) {
45+
$data['error'] = [
46+
'message' => $context['exception']->getMessage(),
47+
'stack' => $context['exception']->getTraceAsString(),
48+
'kind' => $context['exception']::class,
49+
];
50+
unset($data['context']['exception']);
51+
}
52+
53+
$data['source'] = 'php';
54+
if (!isset($data['ddsource'])) {
55+
$data['ddsource'] = $data['source'];
56+
}
57+
if (!isset($data['ddtags']) && isset($context['ddtags'])) {
58+
$data['ddtags'] = $context['ddtags'];
59+
}
60+
if (isset($context['traceId'])) {
61+
$data['dd']['trace_id'] = $context['traceId'];
62+
}
63+
if (isset($record->extra['version'])) {
64+
$data['dd']['version'] = $record->extra['version'];
65+
}
66+
if (!isset($data['logger'])) {
67+
$data['logger'] = [
68+
'channel' => $record->channel,
69+
'message' => $record->message,
70+
];
71+
}
72+
73+
return $data;
74+
}
75+
}

0 commit comments

Comments
 (0)