From c0e276e96d4d2ccb05d8bf9c3de37bbf18d033d4 Mon Sep 17 00:00:00 2001 From: Ruud Kamphuis Date: Sat, 25 Jul 2015 13:57:25 +0200 Subject: [PATCH] Added logger support for SubscriberMiddleware --- .../NotifiesMessageSubscribersMiddleware.php | 26 +++++++++- ...tifiesMessageSubscribersMiddlewareTest.php | 47 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/src/Subscriber/NotifiesMessageSubscribersMiddleware.php b/src/Subscriber/NotifiesMessageSubscribersMiddleware.php index 3f54b28..dbbbb0b 100644 --- a/src/Subscriber/NotifiesMessageSubscribersMiddleware.php +++ b/src/Subscriber/NotifiesMessageSubscribersMiddleware.php @@ -2,6 +2,9 @@ namespace SimpleBus\Message\Subscriber; +use Psr\Log\LoggerInterface; +use Psr\Log\LogLevel; +use Psr\Log\NullLogger; use SimpleBus\Message\Bus\Middleware\MessageBusMiddleware; use SimpleBus\Message\Subscriber\Resolver\MessageSubscribersResolver; @@ -12,9 +15,26 @@ class NotifiesMessageSubscribersMiddleware implements MessageBusMiddleware */ private $messageSubscribersResolver; - public function __construct(MessageSubscribersResolver $messageSubscribersResolver) + /** + * @var LoggerInterface + */ + private $logger; + + /** + * @var string + */ + private $level; + + public function __construct(MessageSubscribersResolver $messageSubscribersResolver, LoggerInterface $logger = null, $level = LogLevel::DEBUG) { $this->messageSubscribersResolver = $messageSubscribersResolver; + + if (null === $logger) { + $logger = new NullLogger; + } + + $this->logger = $logger; + $this->level = $level; } public function handle($message, callable $next) @@ -22,7 +42,11 @@ public function handle($message, callable $next) $messageSubscribers = $this->messageSubscribersResolver->resolve($message); foreach ($messageSubscribers as $messageSubscriber) { + $this->logger->log($this->level, 'Started notifying a subscriber', ['subscriber' => $messageSubscriber]); + call_user_func($messageSubscriber, $message); + + $this->logger->log($this->level, 'Finished notifying a subscriber', ['subscriber' => $messageSubscriber]); } $next($message); diff --git a/tests/Subscriber/NotifiesMessageSubscribersMiddlewareTest.php b/tests/Subscriber/NotifiesMessageSubscribersMiddlewareTest.php index 29423a8..a052dd0 100644 --- a/tests/Subscriber/NotifiesMessageSubscribersMiddlewareTest.php +++ b/tests/Subscriber/NotifiesMessageSubscribersMiddlewareTest.php @@ -2,6 +2,7 @@ namespace SimpleBus\Message\Tests\Subscriber; +use Psr\Log\LogLevel; use SimpleBus\Message\Subscriber\NotifiesMessageSubscribersMiddleware; use SimpleBus\Message\Subscriber\Resolver\MessageSubscribersResolver; use SimpleBus\Message\Tests\Fixtures\CallableSpy; @@ -35,6 +36,52 @@ public function it_notifies_all_the_relevant_message_subscribers() $this->assertSame([$message], $messageSubscriber2->receivedMessages()); } + /** + * @test + */ + public function it_logs_every_call_to_a_subscriber() + { + $message = $this->dummyMessage(); + + $messageSubscriber1 = new CallableSpy(); + $messageSubscriber2 = new CallableSpy(); + + $messageSubscribers = [ + $messageSubscriber1, + $messageSubscriber2 + ]; + + $resolver = $this->mockMessageSubscribersResolver($message, $messageSubscribers); + $logger = $this->getMock('Psr\Log\LoggerInterface'); + $level = LogLevel::CRITICAL; + + $middleware = new NotifiesMessageSubscribersMiddleware($resolver, $logger, $level); + + $logger->expects($this->at(0)) + ->method('log') + ->with($level, 'Started notifying a subscriber'); + + $logger->expects($this->at(1)) + ->method('log') + ->with($level, 'Finished notifying a subscriber'); + + $logger->expects($this->at(2)) + ->method('log') + ->with($level, 'Started notifying a subscriber'); + + $logger->expects($this->at(3)) + ->method('log') + ->with($level, 'Finished notifying a subscriber'); + + $next = new CallableSpy(); + + $middleware->handle($message, $next); + + $this->assertSame([$message], $next->receivedMessages()); + $this->assertSame([$message], $messageSubscriber1->receivedMessages()); + $this->assertSame([$message], $messageSubscriber2->receivedMessages()); + } + /** * @param object $message * @param array $messageSubscribers