X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2Fexception%2FMWExceptionHandler.php;h=4a1f190c75a43843dfabd9ed3a3e2387a387d0de;hb=12313956c58e88b98d4baf722464e09b4a351bf3;hp=e4ff5f33304b9d29ed277c14ac4cd69af757f791;hpb=52017fad77be3ca263d90a28209f2d7d7871fb51;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/exception/MWExceptionHandler.php b/includes/exception/MWExceptionHandler.php index e4ff5f3330..4a1f190c75 100644 --- a/includes/exception/MWExceptionHandler.php +++ b/includes/exception/MWExceptionHandler.php @@ -19,6 +19,7 @@ */ use MediaWiki\Logger\LoggerFactory; +use MediaWiki\MediaWikiServices; /** * Handler class for MWExceptions @@ -59,71 +60,21 @@ class MWExceptionHandler { * @param Exception|Throwable $e */ protected static function report( $e ) { - global $wgShowExceptionDetails; - - $cmdLine = MWException::isCommandLine(); - - if ( $e instanceof MWException ) { - try { - // Try and show the exception prettily, with the normal skin infrastructure + try { + // Try and show the exception prettily, with the normal skin infrastructure + if ( $e instanceof MWException ) { + // Delegate to MWException until all subclasses are handled by + // MWExceptionRenderer and MWException::report() has been + // removed. $e->report(); - } catch ( Exception $e2 ) { - // Exception occurred from within exception handler - // Show a simpler message for the original exception, - // don't try to invoke report() - $message = "MediaWiki internal error.\n\n"; - - if ( $wgShowExceptionDetails ) { - $message .= 'Original exception: ' . self::getLogMessage( $e ) . - "\nBacktrace:\n" . self::getRedactedTraceAsString( $e ) . - "\n\nException caught inside exception handler: " . self::getLogMessage( $e2 ) . - "\nBacktrace:\n" . self::getRedactedTraceAsString( $e2 ); - } else { - $message .= "Exception caught inside exception handler.\n\n" . - "Set \$wgShowExceptionDetails = true; at the bottom of LocalSettings.php " . - "to show detailed debugging information."; - } - - $message .= "\n"; - - if ( $cmdLine ) { - self::printError( $message ); - } else { - echo nl2br( htmlspecialchars( $message ) ) . "\n"; - } - } - } else { - if ( !$wgShowExceptionDetails ) { - $message = self::getPublicLogMessage( $e ); } else { - $message = self::getLogMessage( $e ) . - "\nBacktrace:\n" . - self::getRedactedTraceAsString( $e ) . "\n"; + MWExceptionRenderer::output( $e, MWExceptionRenderer::AS_PRETTY ); } - - if ( $cmdLine ) { - self::printError( $message ); - } else { - echo nl2br( htmlspecialchars( $message ) ) . "\n"; - } - - } - } - - /** - * Print a message, if possible to STDERR. - * Use this in command line mode only (see isCommandLine) - * - * @param string $message Failure text - */ - public static function printError( $message ) { - # NOTE: STDERR may not be available, especially if php-cgi is used from the - # command line (bug #15602). Try to produce meaningful output anyway. Using - # echo may corrupt output to STDOUT though. - if ( defined( 'STDERR' ) ) { - fwrite( STDERR, $message ); - } else { - echo $message; + } catch ( Exception $e2 ) { + // Exception occurred from within exception handler + // Show a simpler message for the original exception, + // don't try to invoke report() + MWExceptionRenderer::output( $e, MWExceptionRenderer::AS_RAW, $e2 ); } } @@ -136,16 +87,16 @@ class MWExceptionHandler { * @param Exception|Throwable $e */ public static function rollbackMasterChangesAndLog( $e ) { - $factory = wfGetLBFactory(); - if ( $factory->hasMasterChanges() ) { + $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); + if ( $lbFactory->hasMasterChanges() ) { $logger = LoggerFactory::getInstance( 'Bug56269' ); $logger->warning( 'Exception thrown with an uncommited database transaction: ' . self::getLogMessage( $e ), self::getLogContext( $e ) ); - $factory->rollbackMasterChanges( __METHOD__ ); } + $lbFactory->rollbackMasterChanges( __METHOD__ ); } /** @@ -488,7 +439,11 @@ TXT; return "[$id] $url $type from line $line of $file: $message"; } - public static function getPublicLogMessage( Exception $e ) { + /** + * @param Exception|Throwable $e + * @return string + */ + public static function getPublicLogMessage( $e ) { $reqId = WebRequest::getRequestId(); $type = get_class( $e ); return '[' . $reqId . '] '