From b5efa72afdfec05f391040604b683324939f2f35 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Tue, 2 Dec 2014 22:41:00 +0000 Subject: [PATCH] exception: Hide suppressed errors in 'error' log, flag in 'error-json' Follows-up 399ba2f. Bug: T75619 Bug: T45086 Change-Id: I1f312660c058a3940bf1e9425f86cfd531121ba3 --- includes/exception/MWExceptionHandler.php | 24 ++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/includes/exception/MWExceptionHandler.php b/includes/exception/MWExceptionHandler.php index 3faad913bd..77ab6ad463 100644 --- a/includes/exception/MWExceptionHandler.php +++ b/includes/exception/MWExceptionHandler.php @@ -436,6 +436,11 @@ TXT; 'message' => $e->getMessage(), ); + if ( $e instanceof ErrorException && ( error_reporting() & $e->getSeverity() ) === 0 ) { + // Flag surpressed errors + $exceptionData['suppressed'] = true; + } + // Because MediaWiki is first and foremost a web application, we set a // 'url' key unconditionally, but set it to null if the exception does // not occur in the context of a web request, as a way of making that @@ -481,18 +486,23 @@ TXT; * Log an exception that wasn't thrown but made to wrap an error. * * @since 1.25 - * @param Exception $e + * @param ErrorException $e */ - protected static function logError( Exception $e ) { + protected static function logError( ErrorException $e ) { global $wgLogExceptionBacktrace; - $log = self::getLogMessage( $e ); - if ( $wgLogExceptionBacktrace ) { - wfDebugLog( 'error', $log . "\n" . $e->getTraceAsString() ); - } else { - wfDebugLog( 'error', $log ); + // The set_error_handler callback is independent from error_reporting. + // Filter out unwanted errors manually (e.g. when wfSuppressWarnings is active). + if ( ( error_reporting() & $e->getSeverity() ) !== 0 ) { + $log = self::getLogMessage( $e ); + if ( $wgLogExceptionBacktrace ) { + wfDebugLog( 'error', $log . "\n" . $e->getTraceAsString() ); + } else { + wfDebugLog( 'error', $log ); + } } + // Include all errors in the json log (surpressed errors will be flagged) $json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK ); if ( $json !== false ) { wfDebugLog( 'error-json', $json, 'private' ); -- 2.20.1