From 2d506686587f5b08e50c2e5e476e6e7d90a41988 Mon Sep 17 00:00:00 2001 From: Anton Gorlanov Date: Thu, 13 Aug 2020 12:53:19 +0300 Subject: [PATCH] Speed up Logger::addRecord --- src/Monolog/Logger.php | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/Monolog/Logger.php b/src/Monolog/Logger.php index 0fb5196b..8e6698a7 100644 --- a/src/Monolog/Logger.php +++ b/src/Monolog/Logger.php @@ -285,16 +285,18 @@ class Logger implements LoggerInterface, ResettableInterface */ 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])) { - $handlerKey = $key; break; } - } - if (null === $handlerKey) { + $offset++; + } + // cut off checked not handleable handlers + $remainedHandlers = array_slice($this->handlers, $offset); + + if (!$remainedHandlers) { return false; } @@ -315,18 +317,10 @@ class Logger implements LoggerInterface, ResettableInterface $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)) { break; } - - next($this->handlers); } } catch (Throwable $e) { $this->handleException($e, $record);