Follows-up
81e8d7af4129eb56 and
e861191b2cdceeeecee.
When using $wgShowDebug, $wgDebugComments, or $wgDebugLogFile
locally, or when using the 'log' attribute with X-Wikimedia-Debug,
all channels should be enabled and logged. But, the DBQuery logs
are currently going nowhere.
The code for MWDebug::query() is intercepting it, even if
$wgDebugToolbar is not enabled.
And after that, the code for wfLogDBError was intercepting it,
again, even if $wgDBerrorLog is not enabled.
Bug: T202764
Change-Id: I710c26a9e9c30fea20975d1bc24e1f0af077c2ad
* @param string $function
* @param bool $isMaster
* @param float $runTime Query run time
* @param string $function
* @param bool $isMaster
* @param float $runTime Query run time
- * @return int ID number of the query to pass to queryTime or -1 if the
- * debugger is disabled
+ * @return bool True if debugger is enabled, false otherwise
*/
public static function query( $sql, $function, $isMaster, $runTime ) {
if ( !self::$enabled ) {
*/
public static function query( $sql, $function, $isMaster, $runTime ) {
if ( !self::$enabled ) {
}
// Replace invalid UTF-8 chars with a square UTF-8 character
}
// Replace invalid UTF-8 chars with a square UTF-8 character
- return count( self::$query ) - 1;
* @return null
*/
public function log( $level, $message, array $context = [] ) {
* @return null
*/
public function log( $level, $message, array $context = [] ) {
+ global $wgDBerrorLog;
+
if ( is_string( $level ) ) {
$level = self::$levelMapping[$level];
}
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'
+ && isset( $context['method'] )
+ && isset( $context['master'] )
+ && isset( $context['runtime'] )
- 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(
+ $message,
+ $context['method'],
+ $context['master'],
+ $context['runtime']
+ );
+ 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]
if ( isset( self::$dbChannels[$this->channel] )
&& $level >= self::$levelMapping[LogLevel::ERROR]
) {
// Format and write DB errors to the legacy locations
$effectiveChannel = 'wfLogDBError';
) {
// Format and write DB errors to the legacy locations
$effectiveChannel = 'wfLogDBError';