diff --git a/UPGRADE-4.3.md b/UPGRADE-4.3.md
index dc19c8b360947..5415884901775 100644
--- a/UPGRADE-4.3.md
+++ b/UPGRADE-4.3.md
@@ -61,6 +61,7 @@ Messenger
---------
* `Amqp` transport does not throw `\AMQPException` anymore, catch `TransportException` instead.
+ * Deprecated the `LoggingMiddleware` class, pass a logger to `SendMessageMiddleware` instead.
Routing
-------
diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md
index 8232d24a42ab1..3662374ef83e4 100644
--- a/UPGRADE-5.0.md
+++ b/UPGRADE-5.0.md
@@ -207,6 +207,11 @@ HttpKernel
* Removed `ConfigDataCollector::getApplicationName()`
* Removed `ConfigDataCollector::getApplicationVersion()`
+Messenger
+---------
+
+ * The `LoggingMiddleware` class has been removed, pass a logger to `SendMessageMiddleware` instead.
+
Monolog
-------
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 240912b33b329..391408a348f4c 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -1598,7 +1598,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
}
$defaultMiddleware = [
- 'before' => [['id' => 'logging']],
+ 'before' => [],
'after' => [['id' => 'send_message'], ['id' => 'handle_message']],
];
foreach ($config['buses'] as $busId => $bus) {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
index 1be0a9977c2e4..4997fdf5d0f1a 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml
@@ -13,7 +13,11 @@
+
+
+
+
@@ -28,7 +32,11 @@
+
+
+
+
@@ -39,12 +47,6 @@
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
index 1afe5f199c14d..1bbd048319b5a 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php
@@ -701,14 +701,12 @@ public function testMessengerWithMultipleBuses()
$this->assertTrue($container->has('messenger.bus.commands'));
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
$this->assertEquals([
- ['id' => 'logging'],
['id' => 'send_message'],
['id' => 'handle_message'],
], $container->getParameter('messenger.bus.commands.middleware'));
$this->assertTrue($container->has('messenger.bus.events'));
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
$this->assertEquals([
- ['id' => 'logging'],
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
['id' => 'send_message'],
['id' => 'handle_message'],
diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md
index b7f604f41c00c..7166c1b832dd4 100644
--- a/src/Symfony/Component/Messenger/CHANGELOG.md
+++ b/src/Symfony/Component/Messenger/CHANGELOG.md
@@ -6,15 +6,13 @@ CHANGELOG
* Added `PhpSerializer` which uses PHP's native `serialize()` and
`unserialize()` to serialize messages to a transport
-
* [BC BREAK] If no serializer were passed, the default serializer
changed from `Serializer` to `PhpSerializer` inside `AmqpReceiver`,
`AmqpSender`, `AmqpTransport` and `AmqpTransportFactory`.
-
* Added `TransportException` to mark an exception transport-related
-
* [BC BREAK] If listening to exceptions while using `AmqpSender` or `AmqpReceiver`, `\AMQPException` is
no longer thrown in favor of `TransportException`.
+ * Deprecated `LoggingMiddleware`, pass a logger to `SendMessageMiddleware` instead.
4.2.0
-----
diff --git a/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php b/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php
index f50816b34976e..5f854f257f792 100644
--- a/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php
+++ b/src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php
@@ -170,8 +170,8 @@ protected function execute(InputInterface $input, OutputInterface $output): void
$io->comment('Quit the worker with CONTROL-C.');
- if (!$output->isDebug()) {
- $io->comment('Re-run the command with a -vvv option to see logs about consumed messages.');
+ if (OutputInterface::VERBOSITY_VERBOSE > $output->getVerbosity()) {
+ $io->comment('Re-run the command with a -vv option to see logs about consumed messages.');
}
$worker = new Worker($receiver, $bus);
diff --git a/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php b/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php
index ba89051f24d3e..ed47ac6389128 100644
--- a/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php
+++ b/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php
@@ -11,6 +11,8 @@
namespace Symfony\Component\Messenger\Middleware;
+use Psr\Log\LoggerAwareTrait;
+use Psr\Log\NullLogger;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Exception\NoHandlerForMessageException;
use Symfony\Component\Messenger\Handler\HandlersLocatorInterface;
@@ -23,6 +25,8 @@
*/
class HandleMessageMiddleware implements MiddlewareInterface
{
+ use LoggerAwareTrait;
+
private $handlersLocator;
private $allowNoHandlers;
@@ -30,6 +34,7 @@ public function __construct(HandlersLocatorInterface $handlersLocator, bool $all
{
$this->handlersLocator = $handlersLocator;
$this->allowNoHandlers = $allowNoHandlers;
+ $this->logger = new NullLogger();
}
/**
@@ -41,11 +46,24 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
{
$handler = null;
$message = $envelope->getMessage();
+
+ $context = [
+ 'message' => $message,
+ 'class' => \get_class($message),
+ ];
+
foreach ($this->handlersLocator->getHandlers($envelope) as $alias => $handler) {
- $envelope = $envelope->with(HandledStamp::fromCallable($handler, $handler($message), \is_string($alias) ? $alias : null));
+ $handledStamp = HandledStamp::fromCallable($handler, $handler($message), \is_string($alias) ? $alias : null);
+ $envelope = $envelope->with($handledStamp);
+ $this->logger->info('Message "{class}" handled by "{handler}"', $context + ['handler' => $handledStamp->getCallableName()]);
}
- if (null === $handler && !$this->allowNoHandlers) {
- throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', \get_class($envelope->getMessage())));
+
+ if (null === $handler) {
+ if (!$this->allowNoHandlers) {
+ throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', $context['class']));
+ }
+
+ $this->logger->info('No handler for message "{class}"', $context);
}
return $stack->next()->handle($envelope, $stack);
diff --git a/src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php b/src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php
index 7518d018b8375..a2941055fa67d 100644
--- a/src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php
+++ b/src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php
@@ -11,13 +11,15 @@
namespace Symfony\Component\Messenger\Middleware;
+@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, pass a logger to SendMessageMiddleware instead.', LoggingMiddleware::class), E_USER_DEPRECATED);
+
use Psr\Log\LoggerInterface;
use Symfony\Component\Messenger\Envelope;
/**
* @author Samuel Roze
*
- * @experimental in 4.2
+ * @deprecated since 4.3, pass a logger to SendMessageMiddleware instead
*/
class LoggingMiddleware implements MiddlewareInterface
{
diff --git a/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php b/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php
index 7c0ee4a488874..6d6696a4721bd 100644
--- a/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php
+++ b/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php
@@ -11,6 +11,8 @@
namespace Symfony\Component\Messenger\Middleware;
+use Psr\Log\LoggerAwareTrait;
+use Psr\Log\NullLogger;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
use Symfony\Component\Messenger\Stamp\SentStamp;
@@ -24,11 +26,14 @@
*/
class SendMessageMiddleware implements MiddlewareInterface
{
+ use LoggerAwareTrait;
+
private $sendersLocator;
public function __construct(SendersLocatorInterface $sendersLocator)
{
$this->sendersLocator = $sendersLocator;
+ $this->logger = new NullLogger();
}
/**
@@ -36,19 +41,33 @@ public function __construct(SendersLocatorInterface $sendersLocator)
*/
public function handle(Envelope $envelope, StackInterface $stack): Envelope
{
- if ($envelope->all(ReceivedStamp::class)) {
- // it's a received message, do not send it back
- return $stack->next()->handle($envelope, $stack);
- }
+ $context = [
+ 'message' => $envelope->getMessage(),
+ 'class' => \get_class($envelope->getMessage()),
+ ];
+
$handle = false;
$sender = null;
- foreach ($this->sendersLocator->getSenders($envelope, $handle) as $alias => $sender) {
- $envelope = $sender->send($envelope)->with(new SentStamp(\get_class($sender), \is_string($alias) ? $alias : null));
- }
+ try {
+ if ($envelope->all(ReceivedStamp::class)) {
+ // it's a received message, do not send it back
+ $this->logger->info('Received message "{class}"', $context);
+ } else {
+ foreach ($this->sendersLocator->getSenders($envelope, $handle) as $alias => $sender) {
+ $this->logger->info('Sending message "{class}" with "{sender}"', $context + ['sender' => \get_class($sender)]);
+ $envelope = $sender->send($envelope)->with(new SentStamp(\get_class($sender), \is_string($alias) ? $alias : null));
+ }
+ }
+
+ if (null === $sender || $handle) {
+ return $stack->next()->handle($envelope, $stack);
+ }
+ } catch (\Throwable $e) {
+ $context['exception'] = $e;
+ $this->logger->warning('An exception occurred while handling message "{class}"', $context);
- if (null === $sender || $handle) {
- return $stack->next()->handle($envelope, $stack);
+ throw $e;
}
// message should only be sent and not be handled by the next middleware
diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/LoggingMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/LoggingMiddlewareTest.php
index b8f401535931f..675ff76730471 100644
--- a/src/Symfony/Component/Messenger/Tests/Middleware/LoggingMiddlewareTest.php
+++ b/src/Symfony/Component/Messenger/Tests/Middleware/LoggingMiddlewareTest.php
@@ -17,6 +17,9 @@
use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase;
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
+/**
+ * @group legacy
+ */
class LoggingMiddlewareTest extends MiddlewareTestCase
{
public function testDebugLogAndNextMiddleware()
diff --git a/src/Symfony/Component/Messenger/composer.json b/src/Symfony/Component/Messenger/composer.json
index f828b64451943..d0b6fe31f9888 100644
--- a/src/Symfony/Component/Messenger/composer.json
+++ b/src/Symfony/Component/Messenger/composer.json
@@ -16,10 +16,10 @@
}
],
"require": {
- "php": "^7.1.3"
+ "php": "^7.1.3",
+ "psr/log": "~1.0"
},
"require-dev": {
- "psr/log": "~1.0",
"symfony/console": "~3.4|~4.0",
"symfony/dependency-injection": "~3.4.19|^4.1.8",
"symfony/http-kernel": "~3.4|~4.0",