*/
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
/**
* Handler class for MWExceptions
* @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 );
}
}
* @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__ );
}
/**
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 . '] '