From c8bbe52af51c363ba1bdb1d97ecdff3ce0c97c0f Mon Sep 17 00:00:00 2001 From: Andrii Shevchenko Date: Sat, 15 Mar 2025 14:19:21 +0100 Subject: [PATCH] added possibility to set child handler after instantiation (#1946) --- src/Monolog/Handler/BufferHandler.php | 5 +++++ tests/Monolog/Handler/BufferHandlerTest.php | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/Monolog/Handler/BufferHandler.php b/src/Monolog/Handler/BufferHandler.php index c241c32f..7b5ebbbe 100644 --- a/src/Monolog/Handler/BufferHandler.php +++ b/src/Monolog/Handler/BufferHandler.php @@ -162,4 +162,9 @@ class BufferHandler extends AbstractHandler implements ProcessableHandlerInterfa throw new \UnexpectedValueException('The nested handler of type '.\get_class($this->handler).' does not support formatters.'); } + + public function setHandler(HandlerInterface $handler) + { + $this->handler = $handler; + } } diff --git a/tests/Monolog/Handler/BufferHandlerTest.php b/tests/Monolog/Handler/BufferHandlerTest.php index d36a2713..3f1bfb68 100644 --- a/tests/Monolog/Handler/BufferHandlerTest.php +++ b/tests/Monolog/Handler/BufferHandlerTest.php @@ -155,4 +155,24 @@ class BufferHandlerTest extends TestCase $records = $test->getRecords(); $this->assertTrue($records[0]['extra']['foo']); } + + public function testSetHandler() + { + $testOriginal = new TestHandler(); + $handler = new BufferHandler($testOriginal); + $handler->handle($this->getRecord(Level::Info)); + + $testNew = new TestHandler(); + $handler->setHandler($testNew); + + $handler->handle($this->getRecord(Level::Debug)); + + $handler->close(); + + $this->assertFalse($testOriginal->hasInfoRecords()); + $this->assertFalse($testOriginal->hasDebugRecords()); + $this->assertTrue($testNew->hasInfoRecords()); + $this->assertTrue($testNew->hasDebugRecords()); + $this->assertCount(2, $testNew->getRecords()); + } }