Skip to content

Lower log level in case of retry #43492

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 15, 2021
Merged

Lower log level in case of retry #43492

merged 1 commit into from
Oct 15, 2021

Conversation

jderusse
Copy link
Member

@jderusse jderusse commented Oct 14, 2021

Q A
Branch? 5.4
Bug fix? no
New feature? yes
Deprecations? no
Tickets -
License MIT
Doc PR -

When a message is retried, we currently log the failure with a ERROR level (or with a WARNING level in case of RecoverableExceptionInterface).

If the application has set up a retry mechanism, it means failure is expected and is part of the flow. Sending alert for something that will be retried is noise.

This PR reduces the verbosity of retried messages.

Should it be a bug for 4.4 🤔 ?

@carsonbot
Copy link

Hey!

I think @nikophil has recently worked with this code. Maybe they can help review this?

Cheers!

Carsonbot

Copy link
Contributor

@nikophil nikophil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't know why I have been pinged on that, but that's definitely a +1 for me - we're actually thinking this is making to much noise in the logs

@fabpot
Copy link
Member

fabpot commented Oct 15, 2021

Behavior change == new feature :)

@fabpot
Copy link
Member

fabpot commented Oct 15, 2021

Thank you @jderusse.

@fabpot fabpot merged commit 9044f7f into symfony:5.4 Oct 15, 2021
This was referenced Nov 5, 2021
jorissteyn pushed a commit to jorissteyn/symfony that referenced this pull request Nov 17, 2021
This commit adds a new interface method on the `RetryStrategyInterface`
allowing custom retry strategies to control the log severity of failed
and retried messages.

This is a spin-off from symfony#43160

| Q             | A
| ------------- | ---
| Branch?       | 6.0
| Bug fix?      | no
| BC break? | yes - custom retry strategies require including the new trait or implementing the new method
| New feature?  | yes - changelog not yet updated
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | not yet, collecting feedback first

The default logic for determining the log severity for failed messages
has been (since symfony#43492):

 - recoverable exceptions are logged as warning
 - unrecoverable exceptions are logged as critical
 - neutral exceptions are logged as warning after a non-final attempt
 - neutral exceptions are logged as critical after a final attempt

This PR implements the exact same behaviour but in a way that allows
users to augment or override the default behaviour with their own
specific needs. For example, having specific exceptions logged as
`EMERGENCY` or to log them as `NOTICE` until or including the last
attempt.

The refactoring done to make this possible is:

 - move the logic determining if an exception is
   recoverable/unrecoverable/neutral to the `HandlerFailedException`
   so it can be used by retry strategy objects

 - add a new interface method on the `RetryStrategyInterface` (BC
   break!)

 - implement the existing behaviour using the new mechanism in a
   trait, this way, custom retry strategies can easily re-use the
   default behaviour
jorissteyn pushed a commit to jorissteyn/symfony that referenced this pull request Nov 17, 2021
This commit adds a new interface method on the `RetryStrategyInterface`
allowing custom retry strategies to control the log severity of failed
and retried messages.

This is a spin-off from symfony#43160

| Q             | A
| ------------- | ---
| Branch?       | 6.0
| Bug fix?      | no
| BC break? | yes - custom retry strategies require including the new trait or implementing the new method
| New feature?  | yes - changelog not yet updated
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | not yet, collecting feedback first

The default logic for determining the log severity for failed messages
has been (since symfony#43492):

 - recoverable exceptions are logged as warning
 - unrecoverable exceptions are logged as critical
 - neutral exceptions are logged as warning after a non-final attempt
 - neutral exceptions are logged as critical after a final attempt

This PR implements the exact same behaviour but in a way that allows
users to augment or override the default behaviour with their own
specific needs. For example, having specific exceptions logged as
`EMERGENCY` or to log them as `NOTICE` until or including the last
attempt.

The refactoring done to make this possible is:

 - move the logic determining if an exception is
   recoverable/unrecoverable/neutral to the `HandlerFailedException`
   so it can be used by retry strategy objects

 - add a new interface method on the `RetryStrategyInterface` (BC
   break!)

 - implement the existing behaviour using the new mechanism in a
   trait, this way, custom retry strategies can easily re-use the
   default behaviour
jorissteyn pushed a commit to jorissteyn/symfony that referenced this pull request Nov 18, 2021
This commit adds a new interface method on the `RetryStrategyInterface`
allowing custom retry strategies to control the log severity of failed
and retried messages.

This is a spin-off from symfony#43160

| Q             | A
| ------------- | ---
| Branch?       | 6.0
| Bug fix?      | no
| BC break? | yes - custom retry strategies require including the new trait or implementing the new method
| New feature?  | yes - changelog not yet updated
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | not yet, collecting feedback first

The default logic for determining the log severity for failed messages
has been (since symfony#43492):

 - recoverable exceptions are logged as warning
 - unrecoverable exceptions are logged as critical
 - neutral exceptions are logged as warning after a non-final attempt
 - neutral exceptions are logged as critical after a final attempt

This PR implements the exact same behaviour but in a way that allows
users to augment or override the default behaviour with their own
specific needs. For example, having specific exceptions logged as
`EMERGENCY` or to log them as `NOTICE` until or including the last
attempt.

The refactoring done to make this possible is:

 - move the logic determining if an exception is
   recoverable/unrecoverable/neutral to the `HandlerFailedException`
   so it can be used by retry strategy objects

 - add a new interface method on the `RetryStrategyInterface` (BC
   break!)

 - implement the existing behaviour using the new mechanism in a
   trait, this way, custom retry strategies can easily re-use the
   default behaviour
jorissteyn pushed a commit to jorissteyn/symfony that referenced this pull request Nov 18, 2021
This commit adds a new interface method on the `RetryStrategyInterface`
allowing custom retry strategies to control the log severity of failed
and retried messages.

This is a spin-off from symfony#43160

| Q             | A
| ------------- | ---
| Branch?       | 6.0
| Bug fix?      | no
| BC break? | yes - custom retry strategies require including the new trait or implementing the new method
| New feature?  | yes - changelog not yet updated
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | not yet, collecting feedback first

The default logic for determining the log severity for failed messages
has been (since symfony#43492):

 - recoverable exceptions are logged as warning
 - unrecoverable exceptions are logged as critical
 - neutral exceptions are logged as warning after a non-final attempt
 - neutral exceptions are logged as critical after a final attempt

This PR implements the exact same behaviour but in a way that allows
users to augment or override the default behaviour with their own
specific needs. For example, having specific exceptions logged as
`EMERGENCY` or to log them as `NOTICE` until or including the last
attempt.

The refactoring done to make this possible is:

 - move the logic determining if an exception is
   recoverable/unrecoverable/neutral to the `HandlerFailedException`
   so it can be used by retry strategy objects

 - add a new interface method on the `RetryStrategyInterface` (BC
   break!)

 - implement the existing behaviour using the new mechanism in a
   trait, this way, custom retry strategies can easily re-use the
   default behaviour
jorissteyn pushed a commit to jorissteyn/symfony that referenced this pull request Nov 18, 2021
This commit adds a new interface method on the `RetryStrategyInterface`
allowing custom retry strategies to control the log severity of failed
and retried messages.

This is a spin-off from symfony#43160

| Q             | A
| ------------- | ---
| Branch?       | 6.0
| Bug fix?      | no
| BC break? | yes - custom retry strategies require including the new trait or implementing the new method
| New feature?  | yes - changelog not yet updated
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | not yet, collecting feedback first

The default logic for determining the log severity for failed messages
has been (since symfony#43492):

 - recoverable exceptions are logged as warning
 - unrecoverable exceptions are logged as critical
 - neutral exceptions are logged as warning after a non-final attempt
 - neutral exceptions are logged as critical after a final attempt

This PR implements the exact same behaviour but in a way that allows
users to augment or override the default behaviour with their own
specific needs. For example, having specific exceptions logged as
`EMERGENCY` or to log them as `NOTICE` until or including the last
attempt.

The refactoring done to make this possible is:

 - move the logic determining if an exception is
   recoverable/unrecoverable/neutral to the `HandlerFailedException`
   so it can be used by retry strategy objects

 - add a new interface method on the `RetryStrategyInterface` (BC
   break!)

 - implement the existing behaviour using the new mechanism in a
   trait, this way, custom retry strategies can easily re-use the
   default behaviour
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants