Skip to content

Commit 30a2b22

Browse files
[Messenger] deprecate LoggingMiddleware in favor of providing a logger to SendMessageMiddleware
1 parent 18cd342 commit 30a2b22

File tree

11 files changed

+75
-29
lines changed

11 files changed

+75
-29
lines changed

UPGRADE-4.3.md

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Messenger
5555
---------
5656

5757
* `Amqp` transport does not throw `\AMQPException` anymore, catch `TransportException` instead.
58+
* Deprecated the `LoggingMiddleware` class, pass a logger to `SendMessageMiddleware` instead.
5859

5960
Routing
6061
-------

UPGRADE-5.0.md

+5
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,11 @@ HttpKernel
205205
* Removed `ConfigDataCollector::getApplicationName()`
206206
* Removed `ConfigDataCollector::getApplicationVersion()`
207207

208+
Messenger
209+
---------
210+
211+
* The `LoggingMiddleware` class has been removed, pass a logger to `SendMessageMiddleware` instead.
212+
208213
Monolog
209214
-------
210215

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -1575,19 +1575,19 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
15751575
}
15761576

15771577
$defaultMiddleware = [
1578-
'before' => [['id' => 'logging']],
1579-
'after' => [['id' => 'send_message'], ['id' => 'handle_message']],
1578+
['id' => 'send_message'],
1579+
['id' => 'handle_message'],
15801580
];
15811581
foreach ($config['buses'] as $busId => $bus) {
15821582
$middleware = $bus['middleware'];
15831583

15841584
if ($bus['default_middleware']) {
15851585
if ('allow_no_handlers' === $bus['default_middleware']) {
1586-
$defaultMiddleware['after'][1]['arguments'] = [true];
1586+
$defaultMiddleware[1]['arguments'] = [true];
15871587
} else {
1588-
unset($defaultMiddleware['after'][1]['arguments']);
1588+
unset($defaultMiddleware[1]['arguments']);
15891589
}
1590-
$middleware = array_merge($defaultMiddleware['before'], $middleware, $defaultMiddleware['after']);
1590+
$middleware = array_merge($middleware, $defaultMiddleware);
15911591
}
15921592

15931593
foreach ($middleware as $middlewareItem) {

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml

+8-6
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@
1313
<argument type="collection" /> <!-- Messages to send and handle -->
1414
</service>
1515
<service id="messenger.middleware.send_message" class="Symfony\Component\Messenger\Middleware\SendMessageMiddleware">
16+
<tag name="monolog.logger" channel="messenger" />
1617
<argument type="service" id="messenger.senders_locator" />
18+
<call method="setLogger">
19+
<argument type="service" id="logger" on-invalid="ignore" />
20+
</call>
1721
</service>
1822

1923
<!-- Message encoding/decoding -->
@@ -28,7 +32,11 @@
2832

2933
<!-- Middleware -->
3034
<service id="messenger.middleware.handle_message" class="Symfony\Component\Messenger\Middleware\HandleMessageMiddleware" abstract="true">
35+
<tag name="monolog.logger" channel="messenger" />
3136
<argument /> <!-- Bus handler resolver -->
37+
<call method="setLogger">
38+
<argument type="service" id="logger" on-invalid="ignore" />
39+
</call>
3240
</service>
3341

3442
<service id="messenger.middleware.validation" class="Symfony\Component\Messenger\Middleware\ValidationMiddleware">
@@ -39,12 +47,6 @@
3947
<argument type="service" id="debug.stopwatch" />
4048
</service>
4149

42-
<!-- Logging -->
43-
<service id="messenger.middleware.logging" class="Symfony\Component\Messenger\Middleware\LoggingMiddleware">
44-
<tag name="monolog.logger" channel="messenger" />
45-
<argument type="service" id="logger" />
46-
</service>
47-
4850
<!-- Discovery -->
4951
<service id="messenger.receiver_locator">
5052
<tag name="container.service_locator" />

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

-2
Original file line numberDiff line numberDiff line change
@@ -694,14 +694,12 @@ public function testMessengerWithMultipleBuses()
694694
$this->assertTrue($container->has('messenger.bus.commands'));
695695
$this->assertSame([], $container->getDefinition('messenger.bus.commands')->getArgument(0));
696696
$this->assertEquals([
697-
['id' => 'logging'],
698697
['id' => 'send_message'],
699698
['id' => 'handle_message'],
700699
], $container->getParameter('messenger.bus.commands.middleware'));
701700
$this->assertTrue($container->has('messenger.bus.events'));
702701
$this->assertSame([], $container->getDefinition('messenger.bus.events')->getArgument(0));
703702
$this->assertEquals([
704-
['id' => 'logging'],
705703
['id' => 'with_factory', 'arguments' => ['foo', true, ['bar' => 'baz']]],
706704
['id' => 'send_message'],
707705
['id' => 'handle_message'],

src/Symfony/Component/Messenger/CHANGELOG.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ CHANGELOG
66

77
* Added `PhpSerializer` which uses PHP's native `serialize()` and
88
`unserialize()` to serialize messages to a transport
9-
109
* [BC BREAK] If no serializer were passed, the default serializer
1110
changed from `Serializer` to `PhpSerializer` inside `AmqpReceiver`,
1211
`AmqpSender`, `AmqpTransport` and `AmqpTransportFactory`.
13-
1412
* Added `TransportException` to mark an exception transport-related
15-
1613
* [BC BREAK] If listening to exceptions while using `AmqpSender` or `AmqpReceiver`, `\AMQPException` is
1714
no longer thrown in favor of `TransportException`.
15+
* Deprecated `LoggingMiddleware`, pass a logger to `SendMessageMiddleware` instead.
1816

1917
4.2.0
2018
-----

src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php

+21-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\Messenger\Middleware;
1313

14+
use Psr\Log\LoggerAwareTrait;
15+
use Psr\Log\NullLogger;
1416
use Symfony\Component\Messenger\Envelope;
1517
use Symfony\Component\Messenger\Exception\NoHandlerForMessageException;
1618
use Symfony\Component\Messenger\Handler\HandlersLocatorInterface;
@@ -23,13 +25,16 @@
2325
*/
2426
class HandleMessageMiddleware implements MiddlewareInterface
2527
{
28+
use LoggerAwareTrait;
29+
2630
private $handlersLocator;
2731
private $allowNoHandlers;
2832

2933
public function __construct(HandlersLocatorInterface $handlersLocator, bool $allowNoHandlers = false)
3034
{
3135
$this->handlersLocator = $handlersLocator;
3236
$this->allowNoHandlers = $allowNoHandlers;
37+
$this->logger = new NullLogger();
3338
}
3439

3540
/**
@@ -41,11 +46,24 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
4146
{
4247
$handler = null;
4348
$message = $envelope->getMessage();
49+
50+
$context = [
51+
'message' => $message,
52+
'class' => \get_class($message),
53+
];
54+
4455
foreach ($this->handlersLocator->getHandlers($envelope) as $alias => $handler) {
45-
$envelope = $envelope->with(HandledStamp::fromCallable($handler, $handler($message), \is_string($alias) ? $alias : null));
56+
$handledStamp = HandledStamp::fromCallable($handler, $handler($message), \is_string($alias) ? $alias : null);
57+
$envelope = $envelope->with($handledStamp);
58+
$this->logger->debug('Message "{class}" handled by "{handler}"', $context + ['handler' => $handledStamp->getCallableName()]);
4659
}
47-
if (null === $handler && !$this->allowNoHandlers) {
48-
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', \get_class($envelope->getMessage())));
60+
61+
if (null === $handler) {
62+
if (!$this->allowNoHandlers) {
63+
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', $context['class']));
64+
}
65+
66+
$this->logger->debug('No handler for message "{class}"', $context);
4967
}
5068

5169
return $stack->next()->handle($envelope, $stack);

src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111

1212
namespace Symfony\Component\Messenger\Middleware;
1313

14+
@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, pass a logger to SendMessageMiddleware instead.', LoggingMiddleware::class), E_USER_DEPRECATED);
15+
1416
use Psr\Log\LoggerInterface;
1517
use Symfony\Component\Messenger\Envelope;
1618

1719
/**
1820
* @author Samuel Roze <samuel.roze@gmail.com>
1921
*
20-
* @experimental in 4.2
22+
* @deprecated since 4.3, pass a logger to SendMessageMiddleware instead
2123
*/
2224
class LoggingMiddleware implements MiddlewareInterface
2325
{

src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php

+26-7
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\Messenger\Middleware;
1313

14+
use Psr\Log\LoggerAwareTrait;
15+
use Psr\Log\NullLogger;
1416
use Symfony\Component\Messenger\Envelope;
1517
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
1618
use Symfony\Component\Messenger\Stamp\SentStamp;
@@ -24,31 +26,48 @@
2426
*/
2527
class SendMessageMiddleware implements MiddlewareInterface
2628
{
29+
use LoggerAwareTrait;
30+
2731
private $sendersLocator;
2832

2933
public function __construct(SendersLocatorInterface $sendersLocator)
3034
{
3135
$this->sendersLocator = $sendersLocator;
36+
$this->logger = new NullLogger();
3237
}
3338

3439
/**
3540
* {@inheritdoc}
3641
*/
3742
public function handle(Envelope $envelope, StackInterface $stack): Envelope
3843
{
39-
if ($envelope->all(ReceivedStamp::class)) {
40-
// it's a received message, do not send it back
41-
return $stack->next()->handle($envelope, $stack);
42-
}
44+
$context = [
45+
'message' => $envelope->getMessage(),
46+
'class' => \get_class($envelope->getMessage()),
47+
];
48+
4349
$handle = false;
4450
$sender = null;
4551

46-
foreach ($this->sendersLocator->getSenders($envelope, $handle) as $alias => $sender) {
47-
$envelope = $sender->send($envelope)->with(new SentStamp(\get_class($sender), \is_string($alias) ? $alias : null));
52+
if ($envelope->all(ReceivedStamp::class)) {
53+
// it's a received message, do not send it back
54+
$this->logger->debug('Received message "{class}"', $context);
55+
} else {
56+
foreach ($this->sendersLocator->getSenders($envelope, $handle) as $alias => $sender) {
57+
$this->logger->debug('Sending message "{class}" with "{sender}"', $context + ['sender' => \get_class($sender)]);
58+
$envelope = $sender->send($envelope)->with(new SentStamp(\get_class($sender), \is_string($alias) ? $alias : null));
59+
}
4860
}
4961

5062
if (null === $sender || $handle) {
51-
return $stack->next()->handle($envelope, $stack);
63+
try {
64+
return $stack->next()->handle($envelope, $stack);
65+
} catch (\Throwable $e) {
66+
$context['exception'] = $e;
67+
$this->logger->warning('An exception occurred while handling message "{class}"', $context);
68+
69+
throw $e;
70+
}
5271
}
5372

5473
// message should only be sent and not be handled by the next middleware

src/Symfony/Component/Messenger/Tests/Middleware/LoggingMiddlewareTest.php

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase;
1818
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
1919

20+
/**
21+
* @group legacy
22+
*/
2023
class LoggingMiddlewareTest extends MiddlewareTestCase
2124
{
2225
public function testDebugLogAndNextMiddleware()

src/Symfony/Component/Messenger/composer.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
}
1717
],
1818
"require": {
19-
"php": "^7.1.3"
19+
"php": "^7.1.3",
20+
"psr/log": "~1.0"
2021
},
2122
"require-dev": {
22-
"psr/log": "~1.0",
2323
"symfony/console": "~3.4|~4.0",
2424
"symfony/dependency-injection": "~3.4.19|^4.1.8",
2525
"symfony/http-kernel": "~3.4|~4.0",

0 commit comments

Comments
 (0)