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

Skip to content

Commit 18724f1

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

34 files changed

+230
-535
lines changed

UPGRADE-7.0.md

+5
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,11 @@ Mime
185185
* Remove `Email::attachPart()` method, use `Email::addPart()` instead
186186
* Require explicit argument when calling `Message::setBody()`
187187

188+
MonologBridge
189+
-------------
190+
191+
* Drop support for monolog < 3.0
192+
188193
PropertyAccess
189194
--------------
190195

composer.json

+1-1
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.0",
139139
"nyholm/psr7": "^1.0",
140140
"pda/pheanstalk": "^4.0",
141141
"php-http/discovery": "^1.15",

src/Symfony/Bridge/Monolog/CHANGELOG.md

+5
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

+15-2
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,7 +87,7 @@ 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([
@@ -153,6 +154,18 @@ private function displayLog(OutputInterface $output, int $clientId, array $recor
153154
$logBlock = sprintf('<bg=%s> </>', self::BG_COLOR[$clientId % 8]);
154155
$output->write($logBlock);
155156

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

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

-51
This file was deleted.

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

+28-33
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;
@@ -98,34 +96,31 @@ public function formatBatch(array $records): mixed
9896
return $records;
9997
}
10098

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

108-
if (!$this->options['ignore_empty_context_and_extra'] || !empty($record['context'])) {
109-
$context = ($this->options['multiline'] ? "\n" : ' ').$this->dumpData($record['context']);
103+
if (!$this->options['ignore_empty_context_and_extra'] || !empty($record->context)) {
104+
$context = $record->context;
105+
$context = ($this->options['multiline'] ? "\n" : ' ').$this->dumpData($context);
110106
} else {
111107
$context = '';
112108
}
113109

114-
if (!$this->options['ignore_empty_context_and_extra'] || !empty($record['extra'])) {
115-
$extra = ($this->options['multiline'] ? "\n" : ' ').$this->dumpData($record['extra']);
110+
if (!$this->options['ignore_empty_context_and_extra'] || !empty($record->extra)) {
111+
$extra = $record->extra;
112+
$extra = ($this->options['multiline'] ? "\n" : ' ').$this->dumpData($extra);
116113
} else {
117114
$extra = '';
118115
}
119116

120117
$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']),
118+
'%datetime%' => $record->datetime->format($this->options['date_format']),
119+
'%start_tag%' => sprintf('<%s>', self::LEVEL_COLOR_MAP[$record->level->value]),
120+
'%level_name%' => sprintf($this->options['level_name_format'], $record->level->getName()),
126121
'%end_tag%' => '</>',
127-
'%channel%' => $record['channel'],
128-
'%message%' => $this->replacePlaceHolder($record)['message'],
122+
'%channel%' => $record->channel,
123+
'%message%' => $this->replacePlaceHolder($record)->message,
129124
'%context%' => $context,
130125
'%extra%' => $extra,
131126
]);
@@ -160,15 +155,15 @@ public function castObject(mixed $v, array $a, Stub $s, bool $isNested): array
160155
return $a;
161156
}
162157

163-
private function replacePlaceHolder(array $record): array
158+
private function replacePlaceHolder(LogRecord $record): LogRecord
164159
{
165-
$message = $record['message'];
160+
$message = $record->message;
166161

167162
if (!str_contains($message, '{')) {
168163
return $record;
169164
}
170165

171-
$context = $record['context'];
166+
$context = $record->context;
172167

173168
$replacements = [];
174169
foreach ($context as $k => $v) {
@@ -178,9 +173,7 @@ private function replacePlaceHolder(array $record): array
178173
$replacements['{'.$k.'}'] = sprintf('<comment>%s</>', $v);
179174
}
180175

181-
$record['message'] = strtr($message, $replacements);
182-
183-
return $record;
176+
return $record->with(message: strtr($message, $replacements));
184177
}
185178

186179
private function dumpData(mixed $data, bool $colors = null): string
@@ -195,7 +188,9 @@ private function dumpData(mixed $data, bool $colors = null): string
195188
$this->dumper->setColors($colors);
196189
}
197190

198-
if (!$data instanceof Data) {
191+
if (($data['data'] ?? null) instanceof Data) {
192+
$data = $data['data'];
193+
} elseif (!$data instanceof Data) {
199194
$data = $this->cloner->cloneVar($data);
200195
}
201196
$data = $data->withRefHandles(false);

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

+2-6
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

-51
This file was deleted.

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

-51
This file was deleted.

0 commit comments

Comments
 (0)
0