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)
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