Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bug #29869 [Debug][ErrorHandler] Preserve our error handler when a lo…
…gger sets another one (fancyweb) This PR was merged into the 3.4 branch. Discussion ---------- [Debug][ErrorHandler] Preserve our error handler when a logger sets another one | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - When logging errors handled by the `ErrorHandler::handleError()` method, the logger can temporarily set its own custom error handler. This is for example the case of `Monolog` in the `StreamHandler` class (cf https://github.com/Seldaek/monolog/blob/ebb804e432e8fe0fe96828f30d89c45581d36d07/src/Monolog/Handler/StreamHandler.php#L101). However, when the previous error handler is restored by the logger, it "skips" the real previous handler (the `ErrorHandler::handleError()` one) in the pile and goes back directly to the one before. I guess this is because the `restore_error_handler()` call is technically done in the error handler itself, so it logically restore it to the one before and not to itself. Here is an easy small example that shows the PHP behavior : https://3v4l.org/4OZNZ The only solution I have found to fix it is to set our error handler everytime an error is logged. Here are the things I discovered while trying to find a cleaner fix : - Setting the same error handler in the error handler itself doesn't actually add it to the pile. This is why adding a check is useless. - Checking if the logger modified the error handler is impossible anyway : to get the current error handler, you need to set a new one temporarirly and then revert it. However, when you revert it by calling `restore_error_handler()` you end up having the same problem you are trying to fix... - Also trying to get the current error handler in the error handler itself will return NULL if it is itself. Commits ------- b979fff [Debug][ErrorHandler] Preserve our error handler when a logger set another one
- Loading branch information