From 2b6437bd87b0f18b01ea6c8d5653e899a9cd89b0 Mon Sep 17 00:00:00 2001 From: lenar Date: Tue, 10 May 2011 15:52:43 +0300 Subject: [PATCH] Added ForwardHandler --- src/Monolog/Handler/ForwardHandler.php | 82 ++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/Monolog/Handler/ForwardHandler.php diff --git a/src/Monolog/Handler/ForwardHandler.php b/src/Monolog/Handler/ForwardHandler.php new file mode 100644 index 00000000..db0625a2 --- /dev/null +++ b/src/Monolog/Handler/ForwardHandler.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Logger; + +/** + * Forwards records to multiple handlers + * + * @author Lenar Lõhmus + */ +class ForwardHandler extends AbstractHandler +{ + private $handlersInitialized; + protected $handlers; + + /** + * @param Array $handlers Array of Handlers or factory callbacks($record, $fingersCrossedHandler). + * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(array $handlers, $bubble = false) + { + $this->handlersInitialized = false; + $this->handlers = $handlers; + $this->bubble = $bubble; + } + + /** + * {@inheritdoc} + */ + public function handle(array $record) + { + $this->handlersInitialized || $this->initializeHandlers(); + + foreach ($this->handlers as $handler) { + $handler->handle($record); + } + return false === $this->bubble; + } + + /** + * {@inheritdoc} + */ + public function handleBatch(array $records) + { + $this->handlersInitialized || $this->initializeHandlers(); + + foreach ($this->handlers as $handler) { + $handler->handleBatch($records); + } + } + + /** + * Implemented to comply with the AbstractHandler requirements. Can not be called. + */ + protected function write(array $record) + { + throw new \BadMethodCallException('This method should not be called directly on the FingersCrossedHandler.'); + } + + private function initializeHandlers() + { + foreach ($this->handlers as &$handler) { + if (!$handler instanceof HandlerInterface) { + $handler = call_user_func($this->handler, $record, $this); + if (!$handler instanceof HandlerInterface) { + throw new \RuntimeException("The factory callback should return a HandlerInterface"); + } + } + } + $this->handlersInitialized = true; + } +}