X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fdebug%2Flogger%2FLegacyLogger.php;h=6288a504cce23c55286bf823805ffa8e3ccd42af;hp=d4a79d931f168b354cdb83490da0150660d2137d;hb=88e3a888cc6823f11df79ac53eb963a7e4d2871a;hpb=bc6457b28d70641d366a554d8a82385b53a46fc9 diff --git a/includes/debug/logger/LegacyLogger.php b/includes/debug/logger/LegacyLogger.php index d4a79d931f..974b044beb 100644 --- a/includes/debug/logger/LegacyLogger.php +++ b/includes/debug/logger/LegacyLogger.php @@ -21,15 +21,18 @@ namespace MediaWiki\Logger; use DateTimeZone; +use Error; use Exception; +use WikiMap; use MWDebug; use MWExceptionHandler; use Psr\Log\AbstractLogger; use Psr\Log\LogLevel; +use Throwable; use UDPTransport; /** - * PSR-3 logger that mimics the historic implementation of MediaWiki's + * PSR-3 logger that mimics the historic implementation of MediaWiki's former * wfErrorLog logging implementation. * * This logger is configured by the following global configuration variables: @@ -93,18 +96,37 @@ class LegacyLogger extends AbstractLogger { * @return null */ public function log( $level, $message, array $context = [] ) { + global $wgDBerrorLog; + if ( is_string( $level ) ) { $level = self::$levelMapping[$level]; } - if ( $this->channel === 'DBQuery' && isset( $context['method'] ) - && isset( $context['master'] ) && isset( $context['runtime'] ) + if ( $this->channel === 'DBQuery' + && $level === self::$levelMapping[LogLevel::DEBUG] + && isset( $context['sql'] ) ) { - MWDebug::query( $message, $context['method'], $context['master'], $context['runtime'] ); - return; // only send profiling data to MWDebug profiling + // Also give the query information to the MWDebug tools + $enabled = MWDebug::query( + $context['sql'], + $context['method'], + $context['runtime'], + $context['db_host'] + ); + if ( $enabled ) { + // If we the toolbar was enabled, return early so that we don't + // also log the query to the main debug output. + return; + } } + // If this is a DB-related error, and the site has $wgDBerrorLog + // configured, rewrite the channel as wfLogDBError instead. + // Likewise, if the site does not use $wgDBerrorLog, it should + // configurable like any other channel via $wgDebugLogGroups + // or $wgMWLoggerDefaultSpi. if ( isset( self::$dbChannels[$this->channel] ) && $level >= self::$levelMapping[LogLevel::ERROR] + && $wgDBerrorLog ) { // Format and write DB errors to the legacy locations $effectiveChannel = 'wfLogDBError'; @@ -145,10 +167,6 @@ class LegacyLogger extends AbstractLogger { // specfied. $shouldEmit = (bool)$wgDBerrorLog; - } elseif ( $channel === 'wfErrorLog' ) { - // All messages on the wfErrorLog channel should be emitted. - $shouldEmit = true; - } elseif ( $channel === 'wfDebug' ) { // wfDebug messages are emitted if a catch all logging file has // been specified. Checked explicitly so that 'private' flagged @@ -192,10 +210,9 @@ class LegacyLogger extends AbstractLogger { /** * Format a message. * - * Messages to the 'wfDebug', 'wfLogDBError' and 'wfErrorLog' channels - * receive special formatting to mimic the historic output of the functions - * of the same name. All other channel values are formatted based on the - * historic output of the `wfDebugLog()` global function. + * Messages to the 'wfDebug' and 'wfLogDBError' channels receive special formatting to mimic the + * historic output of the functions of the same name. All other channel values are formatted + * based on the historic output of the `wfDebugLog()` global function. * * @param string $channel * @param string $message @@ -211,9 +228,6 @@ class LegacyLogger extends AbstractLogger { } elseif ( $channel === 'wfLogDBError' ) { $text = self::formatAsWfLogDBError( $channel, $message, $context ); - } elseif ( $channel === 'wfErrorLog' ) { - $text = "{$message}\n"; - } elseif ( $channel === 'profileoutput' ) { // Legacy wfLogProfilingData formatitng $forward = ''; @@ -256,7 +270,7 @@ class LegacyLogger extends AbstractLogger { $e = $context['exception']; $backtrace = false; - if ( $e instanceof Exception ) { + if ( $e instanceof Throwable || $e instanceof Exception ) { $backtrace = MWExceptionHandler::getRedactedTrace( $e ); } elseif ( is_array( $e ) && isset( $e['trace'] ) ) { @@ -314,7 +328,7 @@ class LegacyLogger extends AbstractLogger { $date = $d->format( 'D M j G:i:s T Y' ); $host = wfHostname(); - $wiki = wfWikiID(); + $wiki = WikiMap::getWikiIdFromDbDomain( WikiMap::getCurrentWikiDbDomain() ); $text = "{$date}\t{$host}\t{$wiki}\t{$message}\n"; return $text; @@ -330,7 +344,7 @@ class LegacyLogger extends AbstractLogger { */ protected static function formatAsWfDebugLog( $channel, $message, $context ) { $time = wfTimestamp( TS_DB ); - $wiki = wfWikiID(); + $wiki = WikiMap::getWikiIdFromDbDomain( WikiMap::getCurrentWikiDbDomain() ); $host = wfHostname(); $text = "{$time} {$host} {$wiki}: {$message}\n"; return $text; @@ -362,7 +376,7 @@ class LegacyLogger extends AbstractLogger { * @return string */ protected static function flatten( $item ) { - if ( null === $item ) { + if ( $item === null ) { return '[Null]'; } @@ -392,8 +406,9 @@ class LegacyLogger extends AbstractLogger { return $item->format( 'c' ); } - if ( $item instanceof Exception ) { - return '[Exception ' . get_class( $item ) . '( ' . + if ( $item instanceof Throwable || $item instanceof Exception ) { + $which = $item instanceof Error ? 'Error' : 'Exception'; + return '[' . $which . ' ' . get_class( $item ) . '( ' . $item->getFile() . ':' . $item->getLine() . ') ' . $item->getMessage() . ']'; }