8000 [HttpKernel][MonologBridge][FrameworkBundle] Revisit wiring of debug … · symfony/symfony@8a6a410 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8a6a410

Browse files
[HttpKernel][MonologBridge][FrameworkBundle] Revisit wiring of debug loggers
1 parent 4606073 commit 8a6a410

File tree

20 files changed

+121
-51
lines changed

20 files changed

+121
-51
lines changed

.github/expected-missing-return-types.diff

+8-8
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ diff --git a/src/Symfony/Bridge/Monolog/Handler/MailerHandler.php b/src/Symfony/
357357
diff --git a/src/Symfony/Bridge/Monolog/Logger.php b/src/Symfony/Bridge/Monolog/Logger.php
358358
--- a/src/Symfony/Bridge/Monolog/Logger.php
359359
+++ b/src/Symfony/Bridge/Monolog/Logger.php
360-
@@ -60,5 +60,5 @@ class Logger extends BaseLogger implements DebugLoggerInterface, ResetInterface
360+
@@ -62,5 +62,5 @@ class Logger extends BaseLogger implements DebugLoggerInterface, ResetInterface
361361
* @return void
362362
*/
363363
- public function removeDebugLogger()
@@ -567,13 +567,13 @@ diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/Add
567567
+ public function process(ContainerBuilder $container): void
568568
{
569569
if (!$container->hasDefinition('profiler')) {
570-
@@ -41,5 +41,5 @@ class AddDebugLogProcessorPass implements CompilerPassInterface
570+
@@ -42,5 +42,5 @@ class AddDebugLogProcessorPass implements CompilerPassInterface
571571
* @return void
572572
*/
573573
- public static function configureLogger(mixed $logger)
574574
+ public static function configureLogger(mixed $logger): void
575575
{
576-
if (\is_object($logger) && method_exists($logger, 'removeDebugLogger') && \in_array(\PHP_SAPI, ['cli', 'phpdbg'], true)) {
576+
trigger_deprecation('symfony/framework-bundle', '6.4', 'The "%s()" method is deprecated, use HttpKernel\'s DebugLoggerConfigurator instead.', __METHOD__);
577577
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddExpressionLanguageProvidersPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddExpressionLanguageProvidersPass.php
578578
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddExpressionLanguageProvidersPass.php
579579
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddExpressionLanguageProvidersPass.php
@@ -687,14 +687,14 @@ diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/Wor
687687
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
688688
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
689689
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
690-
@@ -218,5 +218,5 @@ class FrameworkExtension extends Extension
690+
@@ -219,5 +219,5 @@ class FrameworkExtension extends Extension
691691
* @throws LogicException
692692
*/
693693
- public function load(array $configs, ContainerBuilder $container)
694694
+ public function load(array $configs, ContainerBuilder $container): void
695695
{
696696
$loader = new PhpFileLoader($container, new FileLocator(\dirname(__DIR__).'/Resources/config'));
697-
@@ -2974,5 +2974,5 @@ class FrameworkExtension extends Extension
697+
@@ -2979,5 +2979,5 @@ class FrameworkExtension extends Extension
698698
* @return void
699699
*/
700700
- public static function registerRateLimiter(ContainerBuilder $container, string $name, array $limiterConfig)
@@ -704,14 +704,14 @@ diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExt
704704
diff --git a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php
705705
--- a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php
706706
+++ b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php
707-
@@ -94,5 +94,5 @@ class FrameworkBundle extends Bundle
707+
@@ -93,5 +93,5 @@ class FrameworkBundle extends Bundle
708708
* @return void
709709
*/
710710
- public function boot()
711711
+ public function boot(): void
712712
{
713713
$_ENV['DOCTRINE_DEPRECATIONS'] = $_SERVER['DOCTRINE_DEPRECATIONS'] ??= 'trigger';
714-
@@ -119,5 +119,5 @@ class FrameworkBundle extends Bundle
714+
@@ -118,5 +118,5 @@ class FrameworkBundle extends Bundle
715715
* @return void
716716
*/
717717
- public function build(ContainerBuilder $container)
@@ -8310,7 +8310,7 @@ diff --git a/src/Symfony/Component/HttpKernel/DependencyInjection/FragmentRender
83108310
diff --git a/src/Symfony/Component/HttpKernel/DependencyInjection/LoggerPass.php b/src/Symfony/Component/HttpKernel/DependencyInjection/LoggerPass.php
83118311
--- a/src/Symfony/Component/HttpKernel/DependencyInjection/LoggerPass.php
83128312
+++ b/src/Symfony/Component/HttpKernel/DependencyInjection/LoggerPass.php
8313-
@@ -29,5 +29,5 @@ class LoggerPass implements CompilerPassInterface
8313+
@@ -30,5 +30,5 @@ class LoggerPass implements CompilerPassInterface
83148314
* @return void
83158315
*/
83168316
- public function process(ContainerBuilder $container)

src/Symfony/Bridge/Monolog/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ CHANGELOG
55
---
66

77
* Add native return type to `Logger::clear()` and to `DebugProcessor::clear()`
8+
* Deprecate class `Logger`, use HttpKernel's `DebugLoggerConfigurator` instead
89

910
6.1
1011
---

src/Symfony/Bridge/Monolog/Logger.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@
1111

1212
namespace Symfony\Bridge\Monolog;
1313

14+
trigger_deprecation('symfony/monolog-bridge', '6.4', 'The "%s" class is deprecated, use HttpKernel\'s DebugLoggerConfigurator instead.', Logger::class);
15+
1416
use Monolog\Logger as BaseLogger;
1517
use Monolog\ResettableInterface;
1618
use Symfony\Component\HttpFoundation\Request;
1719
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
1820
use Symfony\Contracts\Service\ResetInterface;
1921

2022
/**
21-
* @author Fabien Potencier <fabien@symfony.com>
23+
* @deprecated since Symfony 6.4, use HttpKernel's DebugLoggerConfigurator instead
2224
*/
2325
class Logger extends BaseLogger implements DebugLoggerInterface, ResetInterface
2426
{

src/Symfony/Bridge/Monolog/Tests/Handler/FirePHPHandlerTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
namespace Symfony\Bridge\Monolog\Tests\Handler;
1313

14+
use Monolog\Logger;
1415
use PHPUnit\Framework\TestCase;
1516
use Symfony\Bridge\Monolog\Handler\FirePHPHandler;
16-
use Symfony\Bridge\Monolog\Logger;
1717
use Symfony\Component\EventDispatcher\EventDispatcher;
1818
use Symfony\Component\HttpFoundation\Request;
1919
use Symfony\Component\HttpFoundation\Response;

src/Symfony/Bridge/Monolog/Tests/Handler/MailerHandlerTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313

1414
use Monolog\Formatter\HtmlFormatter;
1515
use Monolog\Formatter\LineFormatter;
16+
use Monolog\Logger;
1617
use Monolog\LogRecord;
1718
use PHPUnit\Framework\MockObject\MockObject;
1819
use PHPUnit\Framework\TestCase;
1920
use Symfony\Bridge\Monolog\Handler\MailerHandler;
20-
use Symfony\Bridge\Monolog\Logger;
2121
use Symfony\Bridge\Monolog\Tests\RecordFactory;
2222
use Symfony\Component\Mailer\MailerInterface;
2323
use Symfony\Component\Mime\Email;

src/Symfony/Bridge/Monolog/Tests/LoggerTest.php

+3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
use Symfony\Bridge\Monolog\Processor\DebugProcessor;
1919
use Symfony\Component\HttpFoundation\Request;
2020

21+
/**
22+
* @group legacy
23+
*/
2124
class LoggerTest extends TestCase
2225
{
2326
public function testGetLogsWithoutDebugProcessor()

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ CHANGELOG
1010
* Add `DomCrawlerAssertionsTrait::assertAnySelectorTextContains(string $selector, string $text)`
1111
* Add `DomCrawlerAssertionsTrait::assertAnySelectorTextSame(string $selector, string $text)`
1212
* Add `DomCrawlerAssertionsTrait::assertAnySelectorTextNotContains(string $selector, string $text)`
13+
* Deprecate `EnableLoggerDebugModePass`, use argument `$debug` of HttpKernel's `Logger` instead
14+
* Deprecate `AddDebugLogProcessorPass::configureLogger()`, use HttpKernel's `DebugLoggerConfigurator` instead
1315

1416
6.3
1517
---

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddDebugLogProcessorPass.php

+6-3
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,19 @@ public function process(ContainerBuilder $container)
3232
return;
3333
}
3434

35-
$definition = $container->getDefinition('monolog.logger_prototype');
36-
$definition->setConfigurator([__CLASS__, 'configureLogger']);
37-
$definition->addMethodCall('pushProcessor', [new Reference('debug.log_processor')]);
35+
$container->getDefinition('monolog.logger_prototype')
36+
->setConfigurator([new Reference('debug.debug_logger_configurator'), 'pushDebugLogger']);
3837
}
3938

4039
/**
40+
* @deprecated since Symfony 6.4, use HttpKernel's DebugLoggerConfigurator instead
41+
*
4142
* @return void
4243
*/
4344
public static function configureLogger(mixed $logger)
4445
{
46+
trigger_deprecation('symfony/framework-bundle', '6.4', 'The "%s()" method is deprecated, use HttpKernel\'s DebugLoggerConfigurator instead.', __METHOD__);
47+
4548
if (\is_object($logger) && method_exists($logger, 'removeDebugLogger') && \in_array(\PHP_SAPI, ['cli', 'phpdbg'], true)) {
4649
$logger->removeDebugLogger();
4750
}

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/EnableLoggerDebugModePass.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14+
trigger_deprecation('symfony/framework-bundle', '6.4', 'The "%s" class is deprecated, use argument $debug of HttpKernel\'s Logger instead.', EnableLoggerDebugModePass::class);
15+
1416
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1517
use Symfony\Component\DependencyInjection\ContainerBuilder;
1618
use Symfony\Component\HttpKernel\Log\Logger;
1719

20+
/**
21+
* @deprecated since Symfony 6.4, use argument $debug of HttpKernel's Logger instead
22+
*/
1823
final class EnableLoggerDebugModePass implements CompilerPassInterface
1924
{
2025
public function process(ContainerBuilder $container): void
@@ -32,7 +37,7 @@ public function process(ContainerBuilder $container): void
3237

3338
public static function configureLogger(Logger $logger): void
3439
{
35-
if (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && method_exists($logger, 'enableDebug')) {
40+
if (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true)) {
3641
$logger->enableDebug();
3742
}
3843
}

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

+5
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
102102
use Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface;
103103
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
104+
use Symfony\Component\HttpKernel\Log\DebugLoggerConfigurator;
104105
use Symfony\Component\Lock\LockFactory;
105106
use Symfony\Component\Lock\LockInterface;
106107
use Symfony\Component\Lock\PersistingStoreInterface;
@@ -1171,7 +1172,11 @@ private function registerDebugConfiguration(array $config, ContainerBuilder $con
11711172
$definition = new Definition(DebugProcessor::class);
11721173
$definition->setPublic(false);
11731174
$definition->addArgument(new Reference('request_stack'));
1175+
$definition->addTag('kernel.reset', ['method' => 'reset']);
11741176
$container->setDefinition('debug.log_processor', $definition);
1177+
1178+
$container->register('debug.debug_logger_configurator', DebugLoggerConfigurator::class)
1179+
->setArguments([new Reference('debug.log_processor')]);
11751180
}
11761181
}
11771182

src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php

-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AssetsContextPass;
1818
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ContainerBuilderDebugDumpPass;
1919
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\DataCollectorTranslatorPass;
20-
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\EnableLoggerDebugModePass;
2120
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\LoggingTranslatorPass;
2221
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ProfilerPass;
2322
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RemoveUnusedSessionMarshallingHandlerPass;
@@ -183,7 +182,6 @@ public function build(ContainerBuilder $container)
183182
$container->addCompilerPass(new RemoveUnusedSessionMarshallingHandlerPass());
184183

185184
if ($container->getParameter('kernel.debug')) {
186-
$container->addCompilerPass(new EnableLoggerDebugModePass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, -33);
187185
$container->addCompilerPass(new AddDebugLogProcessorPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 2);
188186
$container->addCompilerPass(new UnusedTagsPass(), PassConfig::TYPE_AFTER_REMOVING);
189187
$container->addCompilerPass(new ContainerBuilderDebugDumpPass(), PassConfig::TYPE_BEFORE_REMOVING, -255);

src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
use Symfony\Component\HttpFoundation\RequestStack;
1717
use Symfony\Component\HttpFoundation\Response;
1818
use Symfony\Component\HttpKernel\Debug\FileLinkFormatter;
19-
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
19+
use Symfony\Component\HttpKernel\Log\DebugLoggerConfigurator;
2020
use Symfony\Component\VarDumper\Cloner\Data;
2121
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
2222

@@ -144,7 +144,7 @@ private function renderException(FlattenException $exception, string $debugTempl
144144
'exceptionMessage' => $exceptionMessage,
145145
'statusText' => $statusText,
146146
'statusCode' => $statusCode,
147-
'logger' => $this->logger instanceof DebugLoggerInterface ? $this->logger : null,
147+
'logger' => DebugLoggerConfigurator::getDebugLogger($this->logger),
148148
'currentContent' => \is_string($this->outputBuffer) ? $this->outputBuffer : ($this->outputBuffer)(),
149149
]);
150150
}

src/Symfony/Component/ErrorHandler/composer.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@
2121
"symfony/var-dumper": "^5.4|^6.0|^7.0"
2222
},
2323
"require-dev": {
24-
"symfony/http-kernel": "^5.4|^6.0|^7.0",
24+
"symfony/http-kernel": "^6.4|^7.0",
2525
"symfony/serializer": "^5.4|^6.0|^7.0",
2626
"symfony/deprecation-contracts": "^2.5|^3"
2727
},
2828
"conflict": {
29-
"symfony/deprecation-contracts": "<2.5"
29+
"symfony/deprecation-contracts": "<2.5",
30+
"symfony/http-kernel": "<6.4"
3031
},
3132
"autoload": {
3233
"psr-4": { "Symfony\\Component\\ErrorHandler\\": "" },

src/Symfony/Component/HttpKernel/CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ CHANGELOG
99
* Add optional `$className` parameter to `ControllerEvent::getAttributes()`
1010
* Add native return types to `TraceableEventDispatcher` and to `MergeExtensionConfigurationPass`
1111
* Add argument `$validationFailedStatusCode` to `#[MapQueryString]` and `#[MapRequestPayload]`
12+
* Add argument `$debug` to `Logger`
13+
* Add class `DebugLoggerConfigurator`
1214

1315
6.3
1416
---

src/Symfony/Component/HttpKernel/DataCollector/LoggerDataCollector.php

+4-14
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\HttpFoundation\Request;
1616
use Symfony\Component\HttpFoundation\RequestStack;
1717
use Symfony\Component\HttpFoundation\Response;
18+
use Symfony\Component\HttpKernel\Log\DebugLoggerConfigurator;
1819
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
1920
use Symfony\Component\VarDumper\Cloner\Data;
2021

@@ -25,18 +26,15 @@
2526
*/
2627
class LoggerDataCollector extends DataCollector implements LateDataCollectorInterface
2728
{
28-
private DebugLoggerInterface $logger;
29+
private ?DebugLoggerInterface $logger;
2930
private ?string $containerPathPrefix;
3031
private ?Request $currentRequest = null;
3132
private ?RequestStack $requestStack;
3233
private ?array $processedLogs = null;
3334

3435
public function __construct(object $logger = null, string $containerPathPrefix = null, RequestStack $requestStack = null)
3536
{
36-
if ($logger instanceof DebugLoggerInterface) {
37-
$this->logger = $logger;
38-
}
39-
37+
$this->logger = DebugLoggerConfigurator::getDebugLogger($logger);
4038
$this->containerPathPrefix = $containerPathPrefix;
4139
$this->requestStack = $requestStack;
4240
}
@@ -46,17 +44,9 @@ public function collect(Request $request, Response $response, \Throwable $except
4644
$this->currentRequest = $this->requestStack && $this->requestStack->getMainRequest() !== $request ? $request : null;
4745
}
4846

49-
public function reset(): void
50-
{
51-
if (isset($this->logger)) {
52-
$this->logger->clear();
53-
}
54-
parent::reset();
55-
}
56-
5747
public function lateCollect(): void
5848
{
59-
if (isset($this->logger)) {
49+
if ($this->logger) {
6050
$containerDeprecationLogs = $this->getContainerDeprecationLogs();
6151
$this->data = $this->computeErrorsCount($containerDeprecationLogs);
6252
// get compiler logs later (only when they are needed) to improve performance

src/Symfony/Component/HttpKernel/DependencyInjection/LoggerPass.php

+15-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Psr\Log\LoggerInterface;
1515
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1616
use Symfony\Component\DependencyInjection\ContainerBuilder;
17+
use Symfony\Component\DependencyInjection\Definition;
1718
use Symfony\Component\DependencyInjection\Reference;
1819
use Symfony\Component\HttpFoundation\RequestStack;
1920
use Symfony\Component\HttpKernel\Log\Logger;
@@ -37,8 +38,21 @@ public function process(ContainerBuilder $container)
3738
return;
3839
}
3940

41+
if ($debug = $container->getParameter('kernel.debug')) {
42+
// Build an expression that will be equivalent to `!in_array(PHP_SAPI, ['cli', 'phpdbg'])`
43+
$debug = (new Definition('bool'))
44+
->setFactory('in_array')
45+
->setArguments([
46+
(new Definition('string'))->setFactory('constant')->setArguments(['PHP_SAPI']),
47+
['cli', 'phpdbg'],
48+
]);
49+
$debug = (new Definition('bool'))
50+
->setFactory('in_array')
51+
->setArguments([$debug, [false]]);
52+
}
53+
4054
$container->register('logger', Logger::class)
41-
->setArguments([null, null, null, new Reference(RequestStack::class)])
55+
->setArguments([null, null, null, new Reference(RequestStack::class), $debug])
4256
->setPublic(false);
4357
}
4458
}

src/Symfony/Component/HttpKernel/EventListener/ErrorListener.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
2727
use Symfony\Component\HttpKernel\HttpKernelInterface;
2828
use Symfony\Component\HttpKernel\KernelEvents;
29-
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
29+
use Symfony\Component\HttpKernel\Log\DebugLoggerConfigurator;
3030

3131
/**
3232
* @author Fabien Potencier <fabien@symfony.com>
@@ -231,7 +231,7 @@ protected function duplicateRequest(\Throwable $exception, Request $request): Re
231231
$attributes = [
232232
'_controller' => $this->controller,
233233
'exception' => $exception,
234-
'logger' => $this->logger instanceof DebugLoggerInterface ? $this->logger : null,
234+
'logger' => DebugLoggerConfigurator::getDebugLogger($this->logger),
235235
];
236236
$request = $request->duplicate(null, null, $attributes);
237237
$request->setMethod('GET');

0 commit comments

Comments
 (0)
0