'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,
LogLevel::EMERGENCY => 600,
];
+ /**
+ * @var array
+ */
+ protected static $dbChannels = [
+ 'DBQuery' => true,
+ 'DBConnection' => true
+ ];
+
/**
* @param string $channel
*/
* @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 );
}
* @param string $channel
* @param string $message
* @param array $context
+ * @return null
*/
protected static function formatAsWfDebugLog( $channel, $message, $context ) {
$time = wfTimestamp( TS_DB );
*
* @param string $text
* @param string $file Filename
- * @throws MWException
*/
public static function emit( $text, $file ) {
if ( substr( $file, 0, 4 ) == 'udp:' ) {