Browse Source

Fix GroupHandler::handleBatch when the handler has processors, fixes #814

Jordi Boggiano 9 years ago
parent
commit
69fb2aa1c1
2 changed files with 33 additions and 0 deletions
  1. 10 0
      src/Monolog/Handler/GroupHandler.php
  2. 23 0
      tests/Monolog/Handler/GroupHandlerTest.php

+ 10 - 0
src/Monolog/Handler/GroupHandler.php

@@ -75,6 +75,16 @@ class GroupHandler extends AbstractHandler
      */
     public function handleBatch(array $records)
     {
+        if ($this->processors) {
+            $processed = array();
+            foreach ($records as $record) {
+                foreach ($this->processors as $processor) {
+                    $processed[] = call_user_func($processor, $record);
+                }
+            }
+            $records = $processed;
+        }
+
         foreach ($this->handlers as $handler) {
             $handler->handleBatch($records);
         }

+ 23 - 0
tests/Monolog/Handler/GroupHandlerTest.php

@@ -86,4 +86,27 @@ class GroupHandlerTest extends TestCase
         $records = $test->getRecords();
         $this->assertTrue($records[0]['extra']['foo']);
     }
+
+    /**
+     * @covers Monolog\Handler\GroupHandler::handle
+     */
+    public function testHandleBatchUsesProcessors()
+    {
+        $testHandlers = array(new TestHandler(), new TestHandler());
+        $handler = new GroupHandler($testHandlers);
+        $handler->pushProcessor(function ($record) {
+            $record['extra']['foo'] = true;
+
+            return $record;
+        });
+        $handler->handleBatch(array($this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO)));
+        foreach ($testHandlers as $test) {
+            $this->assertTrue($test->hasDebugRecords());
+            $this->assertTrue($test->hasInfoRecords());
+            $this->assertTrue(count($test->getRecords()) === 2);
+            $records = $test->getRecords();
+            $this->assertTrue($records[0]['extra']['foo']);
+            $this->assertTrue($records[1]['extra']['foo']);
+        }
+    }
 }