2
0
Эх сурвалжийг харах

Speed up Logger::addRecord

Anton Gorlanov 5 жил өмнө
parent
commit
2d50668658

+ 8 - 14
src/Monolog/Logger.php

@@ -285,16 +285,18 @@ class Logger implements LoggerInterface, ResettableInterface
      */
      */
     public function addRecord(int $level, string $message, array $context = []): bool
     public function addRecord(int $level, string $message, array $context = []): bool
     {
     {
-        // check if any handler will handle this message so we can return early and save cycles
-        $handlerKey = null;
-        foreach ($this->handlers as $key => $handler) {
+        $offset = 0;
+        foreach ($this->handlers as $handler) {
             if ($handler->isHandling(['level' => $level])) {
             if ($handler->isHandling(['level' => $level])) {
-                $handlerKey = $key;
                 break;
                 break;
             }
             }
+
+            $offset++;
         }
         }
+        // cut off checked not handleable handlers
+        $remainedHandlers = array_slice($this->handlers, $offset);
 
 
-        if (null === $handlerKey) {
+        if (!$remainedHandlers) {
             return false;
             return false;
         }
         }
 
 
@@ -315,18 +317,10 @@ class Logger implements LoggerInterface, ResettableInterface
                 $record = $processor($record);
                 $record = $processor($record);
             }
             }
 
 
-            // advance the array pointer to the first handler that will handle this record
-            reset($this->handlers);
-            while ($handlerKey !== key($this->handlers)) {
-                next($this->handlers);
-            }
-
-            while ($handler = current($this->handlers)) {
+            foreach ($remainedHandlers as $handler) {
                 if (true === $handler->handle($record)) {
                 if (true === $handler->handle($record)) {
                     break;
                     break;
                 }
                 }
-
-                next($this->handlers);
             }
             }
         } catch (Throwable $e) {
         } catch (Throwable $e) {
             $this->handleException($e, $record);
             $this->handleException($e, $record);