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:
parent
2155a01fd1
commit
81e8d7af41
4 changed files with 37 additions and 8 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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:' ) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue