From 4acf5d3d0b8226a970dc14b79966f31de6c0d2c2 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 30 Sep 2014 09:39:40 +0200 Subject: [PATCH] [Debug] make screaming configurable --- .../FrameworkExtension.php | 6 +-- .../Resources/config/debug_prod.xml | 3 +- .../EventListener/DebugHandlersListener.php | 42 +++++++++++-------- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index ecfd5531b843..093b48a6493e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -127,12 +127,14 @@ public function load(array $configs, ContainerBuilder $container) $definition = $container->findDefinition('debug.debug_handlers_listener'); if ($container->hasParameter('templating.helper.code.file_link_format')) { - $definition->replaceArgument(4, '%templating.helper.code.file_link_format%'); + $definition->replaceArgument(5, '%templating.helper.code.file_link_format%'); } if ($container->getParameter('kernel.debug')) { $loader->load('debug.xml'); + $definition->replaceArgument(3, E_ALL | E_STRICT); + $definition = $container->findDefinition('http_kernel'); $definition->replaceArgument(2, new Reference('debug.controller_resolver')); @@ -143,8 +145,6 @@ public function load(array $configs, ContainerBuilder $container) $container->setAlias('event_dispatcher', 'debug.event_dispatcher'); } else { $definition->replaceArgument(2, E_COMPILE_ERROR | E_PARSE | E_ERROR | E_CORE_ERROR); - - $container->findDefinition('debug.error_handler')->addMethodCall('throwAt', array(0)); } $this->addClassesToCompile(array( diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug_prod.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug_prod.xml index d830006eca42..e5588b2d5180 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug_prod.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug_prod.xml @@ -17,7 +17,8 @@ - %kernel.debug% + 0 + true null diff --git a/src/Symfony/Component/HttpKernel/EventListener/DebugHandlersListener.php b/src/Symfony/Component/HttpKernel/EventListener/DebugHandlersListener.php index eba7859f445c..9d4258d54aae 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/DebugHandlersListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/DebugHandlersListener.php @@ -33,22 +33,25 @@ class DebugHandlersListener implements EventSubscriberInterface private $exceptionHandler; private $logger; private $levels; - private $debug; + private $throwAt; + private $scream; private $fileLinkFormat; /** - * @param callable $exceptionHandler A handler that will be called on Exception + * @param callable|null $exceptionHandler A handler that will be called on Exception * @param LoggerInterface|null $logger A PSR-3 logger * @param array|int $levels An array map of E_* to LogLevel::* or an integer bit field of E_* constants - * @param bool $debug Enables/disables debug mode + * @param int|null $throwAt Thrown errors in a bit field of E_* constants, or null to keep the current value + * @param bool $scream Enables/disables screaming mode, where even silenced errors are logged * @param string $fileLinkFormat The format for links to source files */ - public function __construct($exceptionHandler, LoggerInterface $logger = null, $levels = null, $debug = true, $fileLinkFormat = null) + public function __construct($exceptionHandler, LoggerInterface $logger = null, $levels = null, $throwAt = -1, $scream = true, $fileLinkFormat = null) { $this->exceptionHandler = $exceptionHandler; $this->logger = $logger; $this->levels = $levels; - $this->debug = $debug; + $this->throwAt = is_numeric($throwAt) ? (int) $throwAt : (null === $throwAt ? null : ($throwAt ? -1 : null)); + $this->scream = (bool) $scream; $this->fileLinkFormat = $fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format'); } @@ -66,25 +69,28 @@ public function configure(Event $event = null, $eventName = null, EventDispatche $eventDispatcher->removeListener($name, array($this, 'configure')); } } - if ($this->logger) { - $handler = set_error_handler('var_dump', 0); - $handler = is_array($handler) ? $handler[0] : null; - restore_error_handler(); - if ($handler instanceof ErrorHandler) { - if ($this->debug) { - $handler->throwAt(-1); - } + $handler = set_error_handler('var_dump', 0); + $handler = is_array($handler) ? $handler[0] : null; + restore_error_handler(); + if ($handler instanceof ErrorHandler) { + if ($this->logger) { $handler->setDefaultLogger($this->logger, $this->levels); if (is_array($this->levels)) { $scream = 0; foreach ($this->levels as $type => $log) { $scream |= $type; } - $this->levels = $scream; + } else { + $scream = null === $this->levels ? E_ALL | E_STRICT : $this->levels; } - $handler->screamAt($this->levels); + if ($this->scream) { + $handler->screamAt($scream); + } + $this->logger = $this->levels = null; + } + if (null !== $this->throwAt) { + $handler->throwAt($this->throwAt, true); } - $this->logger = $this->levels = null; } if (!$this->exceptionHandler) { if ($event instanceof KernelEvent) { @@ -110,7 +116,9 @@ public function configure(Event $event = null, $eventName = null, EventDispatche } if ($handler instanceof ExceptionHandler) { $handler->setHandler($this->exceptionHandler); - $handler->setFileLinkFormat($this->fileLinkFormat); + if (null !== $this->fileLinkFormat) { + $handler->setFileLinkFormat($this->fileLinkFormat); + } } $this->exceptionHandler = null; }