public static function output( $e, $mode, $eNew = null ) {
global $wgMimeType;
- if ( $e instanceof DBConnectionError ) {
- self::reportOutageHTML( $e );
- return;
- }
-
if ( defined( 'MW_API' ) ) {
// Unhandled API exception, we can't be sure that format printer is alive
self::header( 'MediaWiki-API-Error: internal_api_error_' . get_class( $e ) );
} elseif ( self::isCommandLine() ) {
self::printError( self::getText( $e ) );
} elseif ( $mode === self::AS_PRETTY ) {
- self::statusHeader( 500 );
- self::header( "Content-Type: $wgMimeType; charset=utf-8" );
- self::reportHTML( $e );
+ if ( $e instanceof DBConnectionError ) {
+ self::reportOutageHTML( $e );
+ } else {
+ self::statusHeader( 500 );
+ self::header( "Content-Type: $wgMimeType; charset=utf-8" );
+ self::reportHTML( $e );
+ }
} else {
if ( $eNew ) {
$message = "MediaWiki internal error.\n\n";
MWExceptionHandler::getLogMessage( $eNew ) .
"\nBacktrace:\n" . MWExceptionHandler::getRedactedTraceAsString( $eNew );
} else {
- $message .= "Exception caught inside exception handler.\n\n" .
- "Set \$wgShowExceptionDetails = true; at the bottom of LocalSettings.php " .
- "to show detailed debugging information.";
+ $message .= 'Original exception: ' .
+ MWExceptionHandler::getPublicLogMessage( $e );
+ $message .= "\n\nException caught inside exception handler.\n\n" .
+ self::getShowBacktraceError( $e );
}
$message .= "\n";
} else {
$message = MWExceptionHandler::getPublicLogMessage( $e );
}
}
- if ( self::isCommandLine() ) {
- self::printError( $message );
- } else {
- echo nl2br( htmlspecialchars( $message ) ) . "\n";
- }
+ echo nl2br( htmlspecialchars( $message ) ) . "\n";
}
}
} else {
// Show any custom GUI message before the details
if ( $e instanceof MessageSpecifier ) {
- $wgOut->addHtml( Message::newFromSpecifier( $e )->escaped() );
+ $wgOut->addHTML( Message::newFromSpecifier( $e )->escaped() );
}
$wgOut->addHTML( self::getHTML( $e ) );
}
$logId,
MWExceptionHandler::getURL()
) . "</div>\n" .
- "<!-- Set \$wgShowExceptionDetails = true; " .
- "at the bottom of LocalSettings.php to show detailed " .
- "debugging information. -->";
+ "<!-- " . wordwrap( self::getShowBacktraceError( $e ), 50 ) . " -->";
}
return $html;
"\nBacktrace:\n" .
MWExceptionHandler::getRedactedTraceAsString( $e ) . "\n";
} else {
- return "Set \$wgShowExceptionDetails = true; " .
- "in LocalSettings.php to show detailed debugging information.\n";
+ return self::getShowBacktraceError( $e );
}
}
);
}
+ /**
+ * @param Exception|Throwable $e
+ * @return string
+ */
+ private static function getShowBacktraceError( $e ) {
+ global $wgShowExceptionDetails, $wgShowDBErrorBacktrace;
+ $vars = [];
+ if ( !$wgShowExceptionDetails ) {
+ $vars[] = '$wgShowExceptionDetails = true;';
+ }
+ if ( $e instanceof DBError && !$wgShowDBErrorBacktrace ) {
+ $vars[] = '$wgShowDBErrorBacktrace = true;';
+ }
+ $vars = implode( ' and ', $vars );
+ return "Set $vars at the bottom of LocalSettings.php to show detailed debugging information";
+ }
+
/**
* @return bool
*/