8000 [MonologBridge] Remove support for monolog < 3 · symfony/symfony@59f5f15 · GitHub
[go: up one dir, main page]

Skip to content

Commit 59f5f15

Browse files
committed
[MonologBridge] Remove support for monolog < 3
1 parent 6f6f35a commit 59f5f15

33 files changed

+234
-534
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@
135135
"guzzlehttp/promises": "^1.4",
136136
"league/html-to-markdown": "^5.0",
137137
"masterminds/html5": "^2.7.2",
138-
"monolog/monolog": "^1.25.1|^2",
138+
"monolog/monolog": "^3",
139139
"nyholm/psr7": "^1.0",
140140
"pda/pheanstalk": "^4.0",
141141
"php-http/discovery": "^1.15",

src/Symfony/Bridge/Monolog/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
7.0
5+
---
6+
7+
* Drop support for monolog < 3.0
8+
49
6.4
510
---
611

src/Symfony/Bridge/Monolog/Command/ServerLogCommand.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313

1414
use Monolog\Formatter\FormatterInterface;
1515
use Monolog\Handler\HandlerInterface;
16-
use Monolog\Logger;
16+
use Monolog\Level;
17+
use Monolog\LogRecord;
1718
use Symfony\Bridge\Monolog\Formatter\ConsoleFormatter;
1819
use Symfony\Bridge\Monolog\Handler\ConsoleHandler;
1920
use Symfony\Component\Console\Attribute\AsCommand;
@@ -86,14 +87,15 @@ protected function execute(InputInterface $input, OutputInterface $output): int
8687
}
8788

8889
$this->handler = new ConsoleHandler($output, true, [
89-
OutputInterface::VERBOSITY_NORMAL => Logger::DEBUG,
90+
OutputInterface::VERBOSITY_NORMAL => Level::Debug,
9091
]);
9192

9293
$this->handler->setFormatter(new ConsoleFormatter([
9394
'format' => str_replace('\n', "\n", $input->getOption('format')),
9495
'date_format' => $input->getOption('date-format'),
9596
'colors' => $output->isDecorated(),
9697
'multiline' => OutputInterface::VERBOSITY_DEBUG <= $output->getVerbosity(),
98+
'from_server_log' => true,
9799
]));
98100

99101
if (!str_contains($host = $input->getOption('host'), '://')) {
@@ -153,6 +155,18 @@ private function displayLog(OutputInterface $output, int $clientId, array $recor
153155
$logBlock = sprintf('<bg=%s> </>', self::BG_COLOR[$clientId % 8]);
154156
$output->write($logBlock);
155157

158+
$record = new LogRecord(
159+
$record['datetime'],
160+
$record['channel'],
161+
Level::fromValue($record['level']),
162+
$record['message'],
163+
// We wrap context and extra, because they have been already dumped.
164+
// So they are instance of Symfony\Component\VarDumper\Cloner\Data
165+
// But LogRecord expects array
166+
[$record['context']],
167+
[$record['extra']],
168+
);
169+
156170
$this->handler->handle($record);
157171
}
158172
}

src/Symfony/Bridge/Monolog/Formatter/CompatibilityFormatter.php

Lines changed: 0 additions & 51 deletions
This file was deleted.

src/Symfony/Bridge/Monolog/Formatter/ConsoleFormatter.php

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
namespace Symfony\Bridge\Monolog\Formatter;
1313

1414
use Monolog\Formatter\FormatterInterface;
15-
use Monolog\Logger;
15+
use Monolog\Level;
1616
use Monolog\LogRecord;
1717
use Symfony\Component\Console\Formatter\OutputFormatter;
1818
use Symfony\Component\VarDumper\Cloner\Data;
@@ -28,20 +28,18 @@
2828
*/
2929
final class ConsoleFormatter implements FormatterInterface
3030
{
31-
use CompatibilityFormatter;
32-
3331
public const SIMPLE_FORMAT = "%datetime% %start_tag%%level_name%%end_tag% <comment>[%channel%]</> %message%%context%%extra%\n";
3432
public const SIMPLE_DATE = 'H:i:s';
3533

3634
private const LEVEL_COLOR_MAP = [
37-
Logger::DEBUG => 'fg=white',
38-
Logger::INFO => 'fg=green',
39-
Logger::NOTICE => 'fg=blue',
40-
Logger::WARNING => 'fg=cyan',
41-
Logger::ERROR => 'fg=yellow',
42-
Logger::CRITICAL => 'fg=red',
43-
Logger::ALERT => 'fg=red',
44-
Logger::EMERGENCY => 'fg=white;bg=red',
35+
Level::Debug->value => 'fg=white',
36+
Level::Info->value => 'fg=green',
37+
Level::Notice->value => 'fg=blue',
38+
Level::Warning->value => 'fg=cyan',
39+
Level::Error->value => 'fg=yellow',
40+
Level::Critical->value => 'fg=red',
41+
Level::Alert->value => 'fg=red',
42+
Level::Emergency->value => 'fg=white;bg=red',
4543
];
4644

4745
private array $options;
@@ -70,6 +68,11 @@ public function __construct(array $options = [])
7068
'multiline' => false,
7169
'level_name_format' => '%-9s',
7270
'ignore_empty_context_and_extra' => true,
71+
/*
72+
* @internal option
73+
* @see Symfony\Bridge\Monolog\Command\ServerLogCommand::displayLog
74+
*/
75+
'from_server_log' => false,
7376
], $options);
7477

7578
if (class_exists(VarCloner::class)) {
@@ -98,34 +101,37 @@ public function formatBatch(array $records): mixed
98101
return $records;
99102
}
100103

101-
private function doFormat(array|LogRecord $record): mixed
104+
public function format(LogRecord $record): mixed
102105
{
103-
if ($record instanceof LogRecord) {
104-
$record = $record->toArray();
105-
}
106106
$record = $this->replacePlaceHolder($record);
107107

108-
if (!$this->options['ignore_empty_context_and_extra'] || !empty($record['context'])) {
109-
$context = ($this->options['multiline'] ? "\n" : ' ').$this->dumpData($record['context']);
108+
if (!$this->options['ignore_empty_context_and_extra'] || !empty($record->context)) {
109+
$context = $record->context;
110+
if ($this->options['from_server_log']) {
111+
$context = $context[0];
112+
}
113+
$context = ($this->options['multiline'] ? "\n" : ' ').$this->dumpData($context);
110114
} else {
111115
$context = '';
112116
}
113117

114-
if (!$this->options['ignore_empty_context_and_extra'] || !empty($record['extra'])) {
115-
$extra = ($this->options['multiline'] ? "\n" : ' ').$this->dumpData($record['extra']);
118+
if (!$this->options['ignore_empty_context_and_extra'] || !empty($record->extra)) {
119+
$extra = $record->extra;
120+
if ($this->options['from_server_log']) {
121+
$extra = $extra[0];
122+
}
123+
$extra = ($this->options['multiline'] ? "\n" : ' ').$this->dumpData($extra);
116124
} else {
117125
$extra = '';
118126
}
119127

120128
$formatted = strtr($this->options['format'], [
121-
'%datetime%' => $record['datetime'] instanceof \DateTimeInterface
122-
? $record['datetime']->format($this->options['date_format'])
123-
: $record['datetime'],
124-
'%start_tag%' => sprintf('<%s>', self::LEVEL_COLOR_MAP[$record['level']]),
125-
'%level_name%' => sprintf($this->options['level_name_format'], $record['level_name']),
129+
'%datetime%' => $record->datetime->format($this->options['date_format']),
130+
'%start_tag%' => sprintf('<%s>', self::LEVEL_COLOR_MAP[$record->level->value]),
131+
'%level_name%' => sprintf($this->options['level_name_format'], $record->level->getName()),
126132
'%end_tag%' => '</>',
127-
'%channel%' => $record['channel'],
128-
'%message%' => $this->replacePlaceHolder($record)['message'],
133+
'%channel%' => $record->channel,
134+
'%message%' => $this->replacePlaceHolder($record)->message,
129135
'%context%' => $context,
130136
'%extra%' => $extra,
131137
]);
@@ -160,15 +166,15 @@ public function castObject(mixed $v, array $a, Stub $s, bool $isNested): array
160166
return $a;
161167
}
162168

163-
private function replacePlaceHolder(array $record): array
169+
private function replacePlaceHolder(LogRecord $record): LogRecord
164170
{
165-
$message = $record['message'];
171+
$message = $record->message;
166172

167173
if (!str_contains($message, '{')) {
168174
return $record;
169175
}
170176

171-
$context = $record['context'];
177+
$context = $record->context;
172178

173179
$replacements = [];
174180
foreach ($context as $k => $v) {
@@ -178,9 +184,7 @@ private function replacePlaceHolder(array $record): array
178184
$replacements['{'.$k.'}'] = sprintf('<comment>%s</>', $v);
179185
}
180186

181-
$record['message'] = strtr($message, $replacements);
182-
183-
return $record;
187+
return $record->with(message: strtr($message, $replacements));
184188
}
185189

186190
private function dumpData(mixed $data, bool $colors = null): string

src/Symfony/Bridge/Monolog/Formatter/VarDumperFormatter.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,16 @@
2020
*/
2121
final class VarDumperFormatter implements FormatterInterface
2222
{
23-
use CompatibilityFormatter;
24-
2523
private VarCloner $cloner;
2624

2725
public function __construct(VarCloner $cloner = null)
2826
{
2927
$this->cloner = $cloner ?? new VarCloner();
3028
}
3129

32-
private function doFormat(array|LogRecord $record): mixed
30+
public function format(LogRecord $record): mixed
3331
{
34-
if ($record instanceof LogRecord) {
35-
$record = $record->toArray();
36-
}
32+
$record = $record->toArray();
3733

3834
$record['context'] = $this->cloner->cloneVar($record['context']);
3935
$record['extra'] = $this->cloner->cloneVar($record['extra']);

src/Symfony/Bridge/Monolog/Handler/CompatibilityHandler.php

Lines changed: 0 additions & 51 deletions
This file was deleted.

src/Symfony/Bridge/Monolog/Handler/CompatibilityProcessingHandler.php

Lines changed: 0 additions & 51 deletions
This file was deleted.

0 commit comments

Comments
 (0)
0