From def6b72ba414419bd3f05c06dd5c88033c7ae6b8 Mon Sep 17 00:00:00 2001 From: Thibaud Fabre Date: Mon, 1 Aug 2016 12:43:30 +0200 Subject: [PATCH] Add support for logger injection --- composer.json | 2 +- .../QueueConfiguration.php | 3 +- src/DependencyInjection/QueueExtension.php | 5 +++ src/Queue/QueueRegistry.php | 33 +++++++++++++++++-- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index b877119..abfedcb 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "phpunit/phpunit": "^5.4" }, "require": { - "alchemy/queue-component": "^0.1", + "alchemy/queue-component": "^0.1.1", "php": ">=5.5" }, "extra": { diff --git a/src/DependencyInjection/QueueConfiguration.php b/src/DependencyInjection/QueueConfiguration.php index adf87af..8897217 100644 --- a/src/DependencyInjection/QueueConfiguration.php +++ b/src/DependencyInjection/QueueConfiguration.php @@ -26,8 +26,9 @@ public function getConfigTreeBuilder() { $builder = new TreeBuilder(); - $builder->root('alchemy_queues') + $builder->root('alchemy_queue') ->children() + ->scalarNode('logger')->defaultNull()->end() ->arrayNode('queues') ->useAttributeAsKey('name', true) ->prototype('array') diff --git a/src/DependencyInjection/QueueExtension.php b/src/DependencyInjection/QueueExtension.php index 0a81cc6..b0f5a39 100644 --- a/src/DependencyInjection/QueueExtension.php +++ b/src/DependencyInjection/QueueExtension.php @@ -14,6 +14,7 @@ use Alchemy\QueueBundle\Queue\QueueRegistry; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension; class QueueExtension extends ConfigurableExtension @@ -39,6 +40,10 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container $registry = new Definition(QueueRegistry::class); $queueConfigurations = $mergedConfig['queues']; + if ($mergedConfig['logger'] != '') { + $registry->addMethodCall('setLogger', [ new Reference($mergedConfig['logger']) ]); + } + foreach ($queueConfigurations as $name => $configuration) { $registry->addMethodCall('bindConfiguration', [ $name, $configuration ]); } diff --git a/src/Queue/QueueRegistry.php b/src/Queue/QueueRegistry.php index bc90142..713d1f0 100644 --- a/src/Queue/QueueRegistry.php +++ b/src/Queue/QueueRegistry.php @@ -13,8 +13,11 @@ use Alchemy\Queue\Amqp\AmqpMessageQueueFactory; use Alchemy\Queue\MessageQueue; +use Psr\Log\LoggerAwareInterface; +use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; -class QueueRegistry +class QueueRegistry implements LoggerAwareInterface { /** * @var array @@ -26,6 +29,16 @@ class QueueRegistry */ private $queues = []; + /** + * @var LoggerInterface + */ + private $logger; + + public function __construct() + { + $this->logger = new NullLogger(); + } + /** * @param string $queueName * @param array $configuration @@ -46,11 +59,25 @@ public function getQueue($queueName) } if (isset($this->configurations[$queueName])) { - return $this->queues[$queueName] = - AmqpMessageQueueFactory::create($this->configurations[$queueName])->getNamedQueue($queueName); + $queue = AmqpMessageQueueFactory::create( + $this->configurations[$queueName], + $this->logger + )->getNamedQueue($queueName); + + return $this->queues[$queueName] = $queue; } throw new \RuntimeException('Queue is not registered: ' . $queueName); } + /** + * Sets a logger instance on the object + * + * @param LoggerInterface $logger + * @return null + */ + public function setLogger(LoggerInterface $logger) + { + $this->logger = $logger; + } }