From d3bc58a01c4bb0e208e7ce03ba1efe8fbb57e30f Mon Sep 17 00:00:00 2001 From: Christophe Coevoet Date: Sun, 8 May 2011 15:18:58 +0200 Subject: [PATCH] Refactored the MailHandler to use the formatter to format the batch message --- src/Monolog/Handler/MailHandler.php | 120 +++------------------ src/Monolog/Handler/SwiftMailerHandler.php | 14 +-- tests/Monolog/Handler/MailHandlerTest.php | 34 +++--- tests/Monolog/TestCase.php | 2 +- 4 files changed, 34 insertions(+), 136 deletions(-) diff --git a/src/Monolog/Handler/MailHandler.php b/src/Monolog/Handler/MailHandler.php index c56bac40..e7074688 100644 --- a/src/Monolog/Handler/MailHandler.php +++ b/src/Monolog/Handler/MailHandler.php @@ -13,139 +13,47 @@ namespace Monolog\Handler; /** * Base class for all mail handlers - * + * * @author Gyula Sallai */ abstract class MailHandler extends AbstractHandler { - - protected $messageFormat; - - /** - * {@inheritdoc} - */ - public function handle(array $record) - { - if ($record['level'] < $this->level) { - return false; - } - - $record = $this->prepareRecord($record); - - $this->write($record); - - return false === $this->bubble; - } - /** * {@inheritdoc} */ public function handleBatch(array $records) - { + { $messages = array(); - + foreach ($records as $record) { if ($record['level'] < $this->level) { continue; } - - $record = $this->prepareRecord($record); - $messages[] = $record['message']; + $messages[] = $this->processRecord($record); } - + if (!empty($messages)) { - $this->send($this->createMessage($messages)); + if (!$this->formatter) { + $this->formatter = $this->getDefaultFormatter(); + } + $this->send($this->formatter->formatBatch($messages)); } } - - /** - * Set the message format - * - * @param string $format - */ - public function setMessageFormat($format) - { - $this->messageFormat = $format; - } - - /** - * Get the message format - * - * @return string - */ - public function getMessageFormat() - { - return $this->messageFormat; - } - + /** * Send a mail with the given content - * + * * @param string $content */ - abstract protected function send($content); - + abstract protected function send($content); + /** * {@inheritdoc} */ protected function write(array $record) { $content = $record['message']; - + $this->send($content); } - - /** - * Create a message to send from the given log entry messages - * - * @param array $messages - * - * @return string - */ - protected function createMessage(array $messages) - { - if (null === $this->messageFormat) { - $this->messageFormat = $this->getDefaultMessageFormat(); - } - - $message = str_replace('%records%', implode('', $messages), $this->messageFormat); - - return $message; - } - - /** - * Prepare a record for writing - * - * This method is just a shortcut for the common handling process (except writing) - * - * @param array $record - * - * @return array - */ - protected function prepareRecord(array $record) - { - if ($this->processors) { - foreach ($this->processors as $processor) { - $record = call_user_func($processor, $record); - } - } - - if (!$this->formatter) { - $this->formatter = $this->getDefaultFormatter(); - } - $record = $this->formatter->format($record); - - return $record; - } - - /** - * Get the default mail message format - * - * @return string - */ - protected function getDefaultMessageFormat() - { - return 'Application logs:\n %records%'; - } - } \ No newline at end of file diff --git a/src/Monolog/Handler/SwiftMailerHandler.php b/src/Monolog/Handler/SwiftMailerHandler.php index 6f862180..8a400032 100644 --- a/src/Monolog/Handler/SwiftMailerHandler.php +++ b/src/Monolog/Handler/SwiftMailerHandler.php @@ -15,28 +15,25 @@ use Monolog\Logger; /** * SwiftMailerHandler uses Swift_Mailer to send the emails - * + * * @author Gyula Sallai */ class SwiftMailerHandler extends MailHandler { - protected $mailer; protected $message; - + /** * @param \Swift_Mailer $mailer The mailer to use - * @param \Swift_Message $message An example message for real messages, - * only the body will be replaced + * @param \Swift_Message $message An example message for real messages, only the body will be replaced * @param integer $level The minimum logging level at which this handler will be triggered * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not */ public function __construct(\Swift_Mailer $mailer, \Swift_Message $message, $level = Logger::ERROR, $bubble = false) { + parent::__construct($level, $bubble); $this->mailer = $mailer; $this->message = $message; - $this->level = $level; - $this->bubble = $bubble; } /** @@ -46,8 +43,7 @@ class SwiftMailerHandler extends MailHandler { $message = clone $this->message; $message->setBody($content); - + $this->mailer->send($message); } - } \ No newline at end of file diff --git a/tests/Monolog/Handler/MailHandlerTest.php b/tests/Monolog/Handler/MailHandlerTest.php index 2d9a6a84..6b8f96be 100644 --- a/tests/Monolog/Handler/MailHandlerTest.php +++ b/tests/Monolog/Handler/MailHandlerTest.php @@ -12,31 +12,27 @@ namespace Monolog\Handler; use Monolog\Logger; - use Monolog\TestCase; class MailHandlerTest extends TestCase { - public function testHandleBatch() { - $records = $this->getMultipleRecords(); - - $formatter = $this->getMock('Monolog\Formatter\LineFormatter'); - $formatter->expects($this->exactly(count($records))) - ->method('format'); // Each record is formatted - + $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter->expects($this->once()) + ->method('formatBatch'); // Each record is formatted + $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); $handler->expects($this->once()) ->method('send'); $handler->expects($this->never()) ->method('write'); // write is for individual records - + $handler->setFormatter($formatter); - - $handler->handleBatch($records); + + $handler->handleBatch($this->getMultipleRecords()); } - + public function testHandleBatchNotSendsMailIfMessagesAreBelowLevel() { $records = array( @@ -44,24 +40,22 @@ class MailHandlerTest extends TestCase $this->getRecord(Logger::DEBUG, 'debug message 2'), $this->getRecord(Logger::INFO, 'information'), ); - + $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); $handler->expects($this->never()) ->method('send'); $handler->setLevel(Logger::ERROR); - + $handler->handleBatch($records); } - + public function testHandle() { - $record = $this->getRecord(); - $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); $handler->expects($this->once()) ->method('send'); - - $handler->handle($record); + + $handler->handle($this->getRecord()); } - + } \ No newline at end of file diff --git a/tests/Monolog/TestCase.php b/tests/Monolog/TestCase.php index e97d12cb..8f4b1caf 100644 --- a/tests/Monolog/TestCase.php +++ b/tests/Monolog/TestCase.php @@ -41,7 +41,7 @@ class TestCase extends \PHPUnit_Framework_TestCase $this->getRecord(Logger::ERROR, 'error') ); } - + /** * @return Monolog\Formatter\FormatterInterface */