[6.x] Fix Monolog v2 handler instantiation #30123
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Monolog 1 has the
setFormatter
method on the HandlerInterface while Monolog 2 extracted that method from theHandlerInterface
to a FormattableHandlerInterface. This now means that a bunch of handlers in Monolog 2 don't have that method aka they are not formattable. The problem is that Laravel is calling thesetFormatter
method without checking if it actually exists on the handler when using Monolog 2 which causes an exception to be thrown.This PR fixes the problem by checking for the
FormattableHandlerInterface
if Monolog 2 is being used. A test has also been added which tests the instantiation of a logger which has theNullHandler
handler which is no longer formattable in Monolog 2. This test will be run with Monolog 1 in the CI with the low deps option and with Monolog 2 in the newest deps pipeline so it confirms that the instantiation now works with both Monolog versions. This test of course doesn't pass without the fix in this PR.Fixes #30026