Avoid MWDebug usage in DatabaseBase

This class is in /libs and cannot depend on all of MediaWiki.
Replace the call with a simple debug() call instead.

Also, make the legacy logger route/format errors from the two
new DB log types (DBConnection, DBQuery) to the old wfLogDBError
locations, including MWDebug::debugMsg().

Change-Id: I64895d3f5b9a000d8186ab6a6ffb4b76a7e9ff40
This commit is contained in:
Aaron Schulz 2016-09-16 13:57:56 -07:00 committed by Kunal Mehta
parent 2155a01fd1
commit 81e8d7af41
4 changed files with 37 additions and 8 deletions

View file

@ -52,8 +52,8 @@ abstract class LBFactoryMW extends LBFactory {
'profiler' => Profiler::instance(),
'trxProfiler' => Profiler::instance()->getTransactionProfiler(),
'replLogger' => LoggerFactory::getInstance( 'DBReplication' ),
'queryLogger' => LoggerFactory::getInstance( 'wfLogDBError' ),
'connLogger' => LoggerFactory::getInstance( 'wfLogDBError' ),
'queryLogger' => LoggerFactory::getInstance( 'DBQuery' ),
'connLogger' => LoggerFactory::getInstance( 'DBConnection' ),
'perfLogger' => LoggerFactory::getInstance( 'DBPerformance' ),
'errorLogger' => [ MWExceptionHandler::class, 'logException' ],
'cliMode' => $wgCommandLineMode,

View file

@ -70,6 +70,14 @@ class LegacyLogger extends AbstractLogger {
LogLevel::EMERGENCY => 600,
];
/**
* @var array
*/
protected static $dbChannels = [
'DBQuery' => true,
'DBConnection' => true
];
/**
* @param string $channel
*/
@ -83,14 +91,29 @@ class LegacyLogger extends AbstractLogger {
* @param string|int $level
* @param string $message
* @param array $context
* @return null
*/
public function log( $level, $message, array $context = [] ) {
if ( self::shouldEmit( $this->channel, $message, $level, $context ) ) {
$text = self::format( $this->channel, $message, $context );
$destination = self::destination( $this->channel, $message, $context );
if ( isset( self::$dbChannels[$this->channel] )
&& isset( self::$levelMapping[$level] )
&& self::$levelMapping[$level] >= LogLevel::ERROR
) {
// Format and write DB errors to the legacy locations
$effectiveChannel = 'wfLogDBError';
} else {
$effectiveChannel = $this->channel;
}
if ( self::shouldEmit( $effectiveChannel, $message, $level, $context ) ) {
$text = self::format( $effectiveChannel, $message, $context );
$destination = self::destination( $effectiveChannel, $message, $context );
self::emit( $text, $destination );
}
if ( !isset( $context['private'] ) || !$context['private'] ) {
if ( $this->channel === 'DBQuery' && isset( $context['method'] )
&& isset( $context['master'] ) && isset( $context['runtime'] )
) {
MWDebug::query( $message, $context['method'], $context['master'], $context['runtime'] );
} elseif ( !isset( $context['private'] ) || !$context['private'] ) {
// Add to debug toolbar if not marked as "private"
MWDebug::debugMsg( $message, [ 'channel' => $this->channel ] + $context );
}
@ -298,6 +321,7 @@ class LegacyLogger extends AbstractLogger {
* @param string $channel
* @param string $message
* @param array $context
* @return null
*/
protected static function formatAsWfDebugLog( $channel, $message, $context ) {
$time = wfTimestamp( TS_DB );
@ -432,7 +456,6 @@ class LegacyLogger extends AbstractLogger {
*
* @param string $text
* @param string $file Filename
* @throws MWException
*/
public static function emit( $text, $file ) {
if ( substr( $file, 0, 4 ) == 'udp:' ) {

View file

@ -903,7 +903,11 @@ abstract class Database implements IDatabase, LoggerAwareInterface {
$this->trxProfiler->recordQueryCompletion(
$queryProf, $startTime, $isWrite, $this->affectedRows()
);
MWDebug::query( $sql, $fname, $isMaster, $queryRuntime );
$this->queryLogger->debug( $sql, [
'method' => $fname,
'master' => $isMaster,
'runtime' => $queryRuntime,
] );
return $ret;
}

View file

@ -34,6 +34,8 @@ class DatabaseTestHelper extends DatabaseBase {
$this->profiler = new ProfilerStub( [] );
$this->trxProfiler = new TransactionProfiler();
$this->cliMode = isset( $opts['cliMode'] ) ? $opts['cliMode'] : true;
$this->connLogger = new \Psr\Log\NullLogger();
$this->queryLogger = new \Psr\Log\NullLogger();
}
/**