feature #39378 [Messenger] Use "warning" instead of "error" log level for RecoverableException (lyrixx)

This PR was merged into the 5.3-dev branch.

Discussion
----------

[Messenger] Use "warning" instead of "error" log level for RecoverableException

| Q             | A
| ------------- | ---
| Branch?       | 5.x
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

When one throw a `RecoverableExceptionInterface`, one knows somethings
wrong occurs, so if an `error` should be emmited, it's in place where the
exception is thrown.

And, by extension, if nothing really wrong occurs (like a random network
error), one may want to retry the message **without** any errors.

That's why in this PR, if an exception of type `RecoverableExceptionInterface`
is thrown, it uses `warning` insteand of `error` log level. So
everything stay under the radar.

Commits
-------

a885ba844d [Messenger] Use "warning" intead of "error" log level for RecoverableException
This commit is contained in:
Fabien Potencier 2020-12-10 07:47:10 +01:00
commit 8b8bffb83b

View File

@ -12,6 +12,7 @@ namespace Symfony\Component\Messenger\EventListener;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent; use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
@ -70,7 +71,18 @@ class SendFailedMessageForRetryListener implements EventSubscriberInterface
$delay = $retryStrategy->getWaitingTime($envelope, $throwable); $delay = $retryStrategy->getWaitingTime($envelope, $throwable);
if (null !== $this->logger) { if (null !== $this->logger) {
$this->logger->error('Error thrown while handling message {class}. Sending for retry #{retryCount} using {delay} ms delay. Error: "{error}"', $context + ['retryCount' => $retryCount, 'delay' => $delay, 'error' => $throwable->getMessage(), 'exception' => $throwable]); $logLevel = LogLevel::ERROR;
if ($throwable instanceof RecoverableExceptionInterface) {
$logLevel = LogLevel::WARNING;
} elseif ($throwable instanceof HandlerFailedException) {
foreach ($throwable->getNestedExceptions() as $nestedException) {
if ($nestedException instanceof RecoverableExceptionInterface) {
$logLevel = LogLevel::WARNING;
break;
}
}
}
$this->logger->log($logLevel, 'Error thrown while handling message {class}. Sending for retry #{retryCount} using {delay} ms delay. Error: "{error}"', $context + ['retryCount' => $retryCount, 'delay' => $delay, 'error' => $throwable->getMessage(), 'exception' => $throwable]);
} }
// add the delay and retry stamp info // add the delay and retry stamp info