[Messenger] deprecate LoggingMiddleware in favor of providing a logger to SendMessageMiddleware
This commit is contained in:
parent
8af6395fa8
commit
2bff625abe
@ -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
|
||||
-------
|
||||
|
@ -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
|
||||
-------
|
||||
|
||||
|
@ -1598,7 +1598,7 @@ class FrameworkExtension extends Extension
|
||||
}
|
||||
|
||||
$defaultMiddleware = [
|
||||
'before' => [['id' => 'logging']],
|
||||
'before' => [],
|
||||
'after' => [['id' => 'send_message'], ['id' => 'handle_message']],
|
||||
];
|
||||
foreach ($config['buses'] as $busId => $bus) {
|
||||
|
@ -13,7 +13,11 @@
|
||||
<argument type="collection" /> <!-- Messages to send and handle -->
|
||||
</service>
|
||||
<service id="messenger.middleware.send_message" class="Symfony\Component\Messenger\Middleware\SendMessageMiddleware">
|
||||
<tag name="monolog.logger" channel="messenger" />
|
||||
<argument type="service" id="messenger.senders_locator" />
|
||||
<call method="setLogger">
|
||||
<argument type="service" id="logger" on-invalid="ignore" />
|
||||
</call>
|
||||
</service>
|
||||
|
||||
<!-- Message encoding/decoding -->
|
||||
@ -28,7 +32,11 @@
|
||||
|
||||
<!-- Middleware -->
|
||||
<service id="messenger.middleware.handle_message" class="Symfony\Component\Messenger\Middleware\HandleMessageMiddleware" abstract="true">
|
||||
<tag name="monolog.logger" channel="messenger" />
|
||||
<argument /> <!-- Bus handler resolver -->
|
||||
<call method="setLogger">
|
||||
<argument type="service" id="logger" on-invalid="ignore" />
|
||||
</call>
|
||||
</service>
|
||||
|
||||
<service id="messenger.middleware.validation" class="Symfony\Component\Messenger\Middleware\ValidationMiddleware">
|
||||
@ -39,12 +47,6 @@
|
||||
<argument type="service" id="debug.stopwatch" />
|
||||
</service>
|
||||
|
||||
<!-- Logging -->
|
||||
<service id="messenger.middleware.logging" class="Symfony\Component\Messenger\Middleware\LoggingMiddleware">
|
||||
<tag name="monolog.logger" channel="messenger" />
|
||||
<argument type="service" id="logger" />
|
||||
</service>
|
||||
|
||||
<!-- Discovery -->
|
||||
<service id="messenger.receiver_locator">
|
||||
<tag name="container.service_locator" />
|
||||
|
@ -701,14 +701,12 @@ abstract class FrameworkExtensionTest extends TestCase
|
||||
$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'],
|
||||
|
@ -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
|
||||
-----
|
||||
|
@ -170,8 +170,8 @@ EOF
|
||||
|
||||
$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);
|
||||
|
@ -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 @@ use Symfony\Component\Messenger\Stamp\HandledStamp;
|
||||
*/
|
||||
class HandleMessageMiddleware implements MiddlewareInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
private $handlersLocator;
|
||||
private $allowNoHandlers;
|
||||
|
||||
@ -30,6 +34,7 @@ class HandleMessageMiddleware implements MiddlewareInterface
|
||||
{
|
||||
$this->handlersLocator = $handlersLocator;
|
||||
$this->allowNoHandlers = $allowNoHandlers;
|
||||
$this->logger = new NullLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -41,11 +46,24 @@ class HandleMessageMiddleware implements MiddlewareInterface
|
||||
{
|
||||
$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);
|
||||
|
@ -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 <samuel.roze@gmail.com>
|
||||
*
|
||||
* @experimental in 4.2
|
||||
* @deprecated since 4.3, pass a logger to SendMessageMiddleware instead
|
||||
*/
|
||||
class LoggingMiddleware implements MiddlewareInterface
|
||||
{
|
||||
|
@ -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 @@ use Symfony\Component\Messenger\Transport\Sender\SendersLocatorInterface;
|
||||
*/
|
||||
class SendMessageMiddleware implements MiddlewareInterface
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
private $sendersLocator;
|
||||
|
||||
public function __construct(SendersLocatorInterface $sendersLocator)
|
||||
{
|
||||
$this->sendersLocator = $sendersLocator;
|
||||
$this->logger = new NullLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -36,19 +41,33 @@ class SendMessageMiddleware implements MiddlewareInterface
|
||||
*/
|
||||
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);
|
||||
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);
|
||||
|
||||
throw $e;
|
||||
}
|
||||
|
||||
// message should only be sent and not be handled by the next middleware
|
||||
|
@ -17,6 +17,9 @@ use Symfony\Component\Messenger\Middleware\LoggingMiddleware;
|
||||
use Symfony\Component\Messenger\Test\Middleware\MiddlewareTestCase;
|
||||
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
class LoggingMiddlewareTest extends MiddlewareTestCase
|
||||
{
|
||||
public function testDebugLogAndNextMiddleware()
|
||||
|
@ -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",
|
||||
|
Reference in New Issue
Block a user