From d2ebd5111390242ca8dae1777625e87f7ac3d056 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 16 Jun 2015 18:24:54 +0200 Subject: [PATCH] [Debug] Fix log level of stacked errors --- src/Symfony/Component/Debug/ErrorHandler.php | 4 +-- .../Debug/Tests/ErrorHandlerTest.php | 34 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Debug/ErrorHandler.php b/src/Symfony/Component/Debug/ErrorHandler.php index eed05c191f..cff29ee79e 100644 --- a/src/Symfony/Component/Debug/ErrorHandler.php +++ b/src/Symfony/Component/Debug/ErrorHandler.php @@ -412,7 +412,7 @@ class ErrorHandler if ($this->isRecursive) { $log = 0; } elseif (self::$stackedErrorLevels) { - self::$stackedErrors[] = array($this->loggers[$type], $message, $e); + self::$stackedErrors[] = array($this->loggers[$type][0], ($type & $level) ? $this->loggers[$type][1] : LogLevel::DEBUG, $message, $e); } else { try { $this->isRecursive = true; @@ -581,7 +581,7 @@ class ErrorHandler self::$stackedErrors = array(); foreach ($errors as $e) { - $e[0][0]->log($e[0][1], $e[1], $e[2]); + $e[0]->log($e[1], $e[2], $e[3]); } } } diff --git a/src/Symfony/Component/Debug/Tests/ErrorHandlerTest.php b/src/Symfony/Component/Debug/Tests/ErrorHandlerTest.php index 1b3f7b41ed..19e7a7def7 100644 --- a/src/Symfony/Component/Debug/Tests/ErrorHandlerTest.php +++ b/src/Symfony/Component/Debug/Tests/ErrorHandlerTest.php @@ -318,6 +318,40 @@ class ErrorHandlerTest extends \PHPUnit_Framework_TestCase } } + public function testErrorStacking() + { + try { + $handler = ErrorHandler::register(); + $handler->screamAt(E_USER_WARNING); + + $logger = $this->getMock('Psr\Log\LoggerInterface'); + + $logger + ->expects($this->exactly(2)) + ->method('log') + ->withConsecutive( + array($this->equalTo(LogLevel::WARNING), $this->equalTo('Dummy log')), + array($this->equalTo(LogLevel::DEBUG), $this->equalTo('Silenced warning')) + ) + ; + + $handler->setDefaultLogger($logger, array(E_USER_WARNING => LogLevel::WARNING)); + + ErrorHandler::stackErrors(); + @trigger_error('Silenced warning', E_USER_WARNING); + $logger->log(LogLevel::WARNING, 'Dummy log'); + ErrorHandler::unstackErrors(); + + restore_error_handler(); + restore_exception_handler(); + } catch (\Exception $e) { + restore_error_handler(); + restore_exception_handler(); + + throw $e; + } + } + public function testHandleFatalError() { try {