diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 15e0801fb9..f9146c242e 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -61,6 +61,9 @@ class FrameworkExtension extends Extension
if ($container->getParameter('kernel.debug')) {
$loader->load('debug.xml');
+ $definition = $container->findDefinition('debug.debug_handlers_listener');
+ $definition->replaceArgument(0, array(new Reference('http_kernel', ContainerInterface::NULL_ON_INVALID_REFERENCE), 'terminateWithException'));
+
$definition = $container->findDefinition('http_kernel');
$definition->replaceArgument(2, new Reference('debug.controller_resolver'));
@@ -69,6 +72,9 @@ class FrameworkExtension extends Extension
$definition->setPublic(false);
$container->setDefinition('debug.event_dispatcher.parent', $definition);
$container->setAlias('event_dispatcher', 'debug.event_dispatcher');
+ } else {
+ $definition = $container->findDefinition('debug.debug_handlers_listener');
+ $definition->replaceArgument(2, E_COMPILE_ERROR | E_PARSE | E_ERROR | E_CORE_ERROR);
}
$configuration = $this->getConfiguration($configs, $container);
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml
index c457e4f903..cdec776713 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml
@@ -9,7 +9,6 @@
*/
class DebugHandlersListener implements EventSubscriberInterface
{
private $exceptionHandler;
+ private $logger;
+ private $levels;
+ private $debug;
- public function __construct($exceptionHandler)
+ /**
+ * @param callable $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
+ */
+ public function __construct($exceptionHandler, LoggerInterface $logger = null, $levels = null, $debug = true)
{
if (is_callable($exceptionHandler)) {
$this->exceptionHandler = $exceptionHandler;
}
+ $this->logger = $logger;
+ $this->levels = $levels;
+ $this->debug = $debug;
}
public function 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->setDefaultLogger($this->logger, $this->levels);
+ if (is_array($this->levels)) {
+ $scream = 0;
+ foreach ($this->levels as $type => $log) {
+ $scream |= $type;
+ }
+ $this->levels = $scream;
+ }
+ $handler->screamAt($this->levels);
+ }
+ $this->logger = $this->levels = null;
+ }
if ($this->exceptionHandler) {
$handler = set_exception_handler('var_dump');
$handler = is_array($handler) ? $handler[0] : null;
restore_exception_handler();
- if ($handler instanceof ExceptionHandler) {
+ if ($handler instanceof ErrorHandler) {
+ $h = $handler->setExceptionHandler('var_dump') ?: $this->exceptionHandler;
+ $handler->setExceptionHandler($h);
+ $handler = is_array($h) ? $h[0] : null;
+ }
+ if ($handler instanceof AbstractExceptionHandler) {
$handler->setHandler($this->exceptionHandler);
}
$this->exceptionHandler = null;
diff --git a/src/Symfony/Component/HttpKernel/EventListener/ErrorsLoggerListener.php b/src/Symfony/Component/HttpKernel/EventListener/ErrorsLoggerListener.php
index 025b6475a4..d5400b7d6e 100644
--- a/src/Symfony/Component/HttpKernel/EventListener/ErrorsLoggerListener.php
+++ b/src/Symfony/Component/HttpKernel/EventListener/ErrorsLoggerListener.php
@@ -21,6 +21,8 @@ use Symfony\Component\HttpKernel\KernelEvents;
*
* @author Colin Frei