Skip to content

Commit 8062dd6

Browse files
authored
Fix monolog line parser to avoid breaking on json with [ and { combinations (#215)
1 parent 424e5a9 commit 8062dd6

File tree

4 files changed

+8
-8
lines changed

4 files changed

+8
-8
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ fd_log_viewer:
100100
downloadable: false
101101
deletable: false
102102
start_of_line_pattern: '/^\[\d{4}-\d{2}-\d{2}[^]]*]\s+\S+\.\S+:/'
103-
log_message_pattern: '/^\[(?P<date>[^\]]+)\]\s+(?P<channel>[^\.]+)\.(?P<severity>[^:]+):\s+(?P<message>.*)\s+(?P<context>[[{].*?[\]}])\s+(?P<extra>[[{].*?[\]}])\s+$/s'
103+
log_message_pattern: '/^\[(?P<date>[^\]]+)\]\s+(?P<channel>[^\.]+)\.(?P<severity>[^:]+):\s+(?P<message>.*)\s+(?P<context>(?:{.*?}|\[.*?]))\s+(?P<extra>(?:{.*?}|\[.*?]))\s+$/s'
104104
date_format: null
105105

106106
hosts:

docs/configuration-reference.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ fd_log_viewer:
2121
downloadable: false
2222
deletable: false
2323
start_of_line_pattern: '/^\[\d{4}-\d{2}-\d{2}[^]]*]\s+\S+\.\S+:/'
24-
log_message_pattern: '/^\[(?P<date>[^\]]+)\]\s+(?P<channel>[^\.]+)\.(?P<severity>[^:]+):\s+(?P<message>.*)\s+(?P<context>[[{].*?[\]}])\s+(?P<extra>[[{].*?[\]}])\s+$/s'
24+
log_message_pattern: '/^\[(?P<date>[^\]]+)\]\s+(?P<channel>[^\.]+)\.(?P<severity>[^:]+):\s+(?P<message>.*)\s+(?P<context>(?:{.*?}|\[.*?]))\s+(?P<extra>(?:{.*?}|\[.*?]))\s+$/s'
2525
date_format: null
2626

2727
hosts:
@@ -172,7 +172,7 @@ This regex pattern is used to parse the log entry into the following named group
172172
- `extra`
173173

174174
The default monolog regex
175-
pattern `/^\[(?P<date>[^\]]+)\]\s+(?P<channel>[^\.]+)\.(?P<severity>[^:]+):\s+(?P<message>.*)\s+(?P<context>[[{].*?[\]}])\s+(?P<extra>[[{].*?[\]}])\s+$/s`
175+
pattern `/^\[(?P<date>[^\]]+)\]\s+(?P<channel>[^\.]+)\.(?P<severity>[^:]+):\s+(?P<message>.*)\s+(?P<context>(?:{.*?}|\[.*?]))\s+(?P<extra>(?:{.*?}|\[.*?]))\s+$/s`
176176
matches:
177177

178178
```text

src/Service/File/Monolog/MonologLineParser.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ class MonologLineParser implements LogLineParserInterface
1616
'/^\[(?P<date>[^\]]+)\]\s+' .
1717
'(?P<channel>[^\.]+)\.(?P<severity>[^:]+):\s+' .
1818
'(?P<message>.*)\s+' .
19-
'(?P<context>[[{].*?[\]}])\s+' .
20-
'(?P<extra>[[{].*?[\]}])\s+$/s';
19+
'(?P<context>(?:{.*?}|\[.*?]))\s+' .
20+
'(?P<extra>(?:{.*?}|\[.*?]))\s+$/s';
2121

2222
private readonly string $logLinePattern;
2323

tests/Unit/Service/File/Monolog/MonologLineParserTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ public function testParseWithContextAndExtra(): void
4242
'severity' => 'DEBUG',
4343
'channel' => 'app',
4444
'message' => 'message',
45-
'context' => ['context' => 'context'],
46-
'extra' => ['extra' => 'extra'],
45+
'context' => ['context' => '[object]context'],
46+
'extra' => ['extra' => '[object]extra'],
4747
];
4848

49-
$result = $this->parser->parse('[2000-01-01T00:00:00.000] app.DEBUG: message {"context":"context"} {"extra":"extra"}' . "\n");
49+
$result = $this->parser->parse('[2000-01-01T00:00:00.000] app.DEBUG: message {"context":"[object]context"} {"extra":"[object]extra"}' . "\n");
5050
static::assertSame($expected, $result);
5151
}
5252

0 commit comments

Comments
 (0)