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

Lines changed: 5 additions & 0 deletions
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

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.0",
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: 15 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,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

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

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

Lines changed: 28 additions & 33 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;
@@ -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

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy