diff --git a/src/Monolog/Logger.php b/src/Monolog/Logger.php index b042fa74..22a6ef17 100644 --- a/src/Monolog/Logger.php +++ b/src/Monolog/Logger.php @@ -175,6 +175,25 @@ class Logger implements LoggerInterface return array_shift($this->handlers); } + /** + * Set handlers, removing all existing ones. + * Falsey values will be ignored, and if a map is passed, keys will be ignored. + * + * @param array $handlers All elements must be of type HandlerInterface + * @return $this + */ + public function setHandlers(array $handlers) + { + $this->handlers = array(); + foreach ($handlers as $handler) { + if ($handler) { + $this->pushHandler($handler); + } + } + + return $this; + } + /** * @return HandlerInterface[] */ diff --git a/tests/Monolog/LoggerTest.php b/tests/Monolog/LoggerTest.php index 146b6f1b..d59549c1 100644 --- a/tests/Monolog/LoggerTest.php +++ b/tests/Monolog/LoggerTest.php @@ -139,6 +139,30 @@ class LoggerTest extends \PHPUnit_Framework_TestCase $logger->popHandler(); } + /** + * @covers Monolog\Logger::setHandlers + */ + public function testSetHandlers() + { + $logger = new Logger(__METHOD__); + $handler1 = new TestHandler; + $handler2 = new TestHandler; + + $logger->pushHandler($handler1); + $logger->setHandlers(array($handler2)); + + // handler1 has been removed + $this->assertEquals(array($handler2), $logger->getHandlers()); + + $logger->setHandlers(array( + "AMapKey" => $handler1, + "Falsey" => null, + )); + + // Keys have been scrubbed + $this->assertEquals(array($handler1), $logger->getHandlers()); + } + /** * @covers Monolog\Logger::pushProcessor * @covers Monolog\Logger::popProcessor