Move MWLogger classes to MediaWiki\Logger namespace
Move the MWLogger PSR-3 logging related classes into the MediaWiki\Logger namespace. Create shim classes to ease migration of existing MWLoggerFactory usage to the namespaced classes. Bug: T93406 Change-Id: I359cc81fbd2dcf8937742311dcc7d3dee08747b0
This commit is contained in:
parent
35f5f0bab7
commit
1195e11a8a
27 changed files with 403 additions and 236 deletions
|
|
@ -132,7 +132,8 @@ production.
|
|||
* The following libraries are now required:
|
||||
** psr/log
|
||||
This library provides the interfaces set by the PSR-3 standard (http://www.php-fig.org/psr/psr-3/)
|
||||
which are used by MediaWiki internally via the MWLoggerFactory class.
|
||||
which are used by MediaWiki internally via the
|
||||
MediaWiki\Logger\LoggerFactory class.
|
||||
See the structured logging RfC (https://www.mediawiki.org/wiki/Requests_for_comment/Structured_logging)
|
||||
for more background information.
|
||||
** cssjanus/cssjanus
|
||||
|
|
|
|||
4
api.php
4
api.php
|
|
@ -30,6 +30,8 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
use MediaWiki\Logger\LegacyLogger;
|
||||
|
||||
// So extensions (and other code) can check whether they're running in API mode
|
||||
define( 'MW_API', true );
|
||||
|
||||
|
|
@ -124,7 +126,7 @@ if ( $wgAPIRequestLog ) {
|
|||
} else {
|
||||
$items[] = "failed in ApiBeforeMain";
|
||||
}
|
||||
MWLoggerLegacyLogger::emit( implode( ',', $items ) . "\n", $wgAPIRequestLog );
|
||||
LegacyLogger::emit( implode( ',', $items ) . "\n", $wgAPIRequestLog );
|
||||
wfDebug( "Logged API request to $wgAPIRequestLog\n" );
|
||||
}
|
||||
|
||||
|
|
|
|||
32
autoload.php
32
autoload.php
|
|
@ -694,17 +694,17 @@ $wgAutoloadLocalClasses = array(
|
|||
'MWFunction' => __DIR__ . '/includes/utils/MWFunction.php',
|
||||
'MWHookException' => __DIR__ . '/includes/Hooks.php',
|
||||
'MWHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
|
||||
'MWLogger' => __DIR__ . '/includes/debug/logger/Logger.php',
|
||||
'MWLoggerFactory' => __DIR__ . '/includes/debug/logger/Factory.php',
|
||||
'MWLoggerLegacyLogger' => __DIR__ . '/includes/debug/logger/legacy/Logger.php',
|
||||
'MWLoggerLegacySpi' => __DIR__ . '/includes/debug/logger/legacy/Spi.php',
|
||||
'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/monolog/Handler.php',
|
||||
'MWLoggerMonologLegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
|
||||
'MWLoggerMonologProcessor' => __DIR__ . '/includes/debug/logger/monolog/Processor.php',
|
||||
'MWLoggerMonologSpi' => __DIR__ . '/includes/debug/logger/monolog/Spi.php',
|
||||
'MWLoggerMonologSyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/SyslogHandler.php',
|
||||
'MWLoggerNullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
|
||||
'MWLoggerSpi' => __DIR__ . '/includes/debug/logger/Spi.php',
|
||||
'MWLogger' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerFactory' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerLegacyLogger' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerLegacySpi' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerMonologLegacyFormatter' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerMonologProcessor' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerMonologSpi' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerMonologSyslogHandler' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerNullSpi' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWLoggerSpi' => __DIR__ . '/includes/debug/logger/Shims.php',
|
||||
'MWMemcached' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
|
||||
'MWMessagePack' => __DIR__ . '/includes/libs/MWMessagePack.php',
|
||||
'MWNamespace' => __DIR__ . '/includes/MWNamespace.php',
|
||||
|
|
@ -737,6 +737,16 @@ $wgAutoloadLocalClasses = array(
|
|||
'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php',
|
||||
'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php',
|
||||
'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
|
||||
'MediaWiki\\Logger\\LegacyLogger' => __DIR__ . '/includes/debug/logger/LegacyLogger.php',
|
||||
'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php',
|
||||
'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php',
|
||||
'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php',
|
||||
'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
|
||||
'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php',
|
||||
'MediaWiki\\Logger\\Monolog\\SyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/SyslogHandler.php',
|
||||
'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php',
|
||||
'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
|
||||
'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
|
||||
'MemCachedClientforWiki' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
|
||||
'MemcLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MemcLockManager.php',
|
||||
'MemcachedBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedBagOStuff.php',
|
||||
|
|
|
|||
71
docs/logger.txt
Normal file
71
docs/logger.txt
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
MediaWiki\Logger\LoggerFactory implements a PSR-3 [0] compatible message
|
||||
logging system.
|
||||
|
||||
Named Psr\Log\LoggerInterface instances can be obtained from the
|
||||
MediaWiki\Logger\LoggerFactory::getInstance() static method.
|
||||
MediaWiki\Logger\LoggerFactory expects a class implementing the
|
||||
MediaWiki\Logger\Spi interface to act as a factory for new
|
||||
Psr\Log\LoggerInterface instances.
|
||||
|
||||
The "Spi" in MediaWiki\Logger\Spi stands for "service provider interface". An
|
||||
SPI is an API intended to be implemented or extended by a third party. This
|
||||
software design pattern is intended to enable framework extension and
|
||||
replaceable components. It is specifically used in the
|
||||
MediaWiki\Logger\LoggerFactory service to allow alternate PSR-3 logging
|
||||
implementations to be easily integrated with MediaWiki.
|
||||
|
||||
The service provider interface allows the backend logging library to be
|
||||
implemented in multiple ways. The $wgMWLoggerDefaultSpi global provides the
|
||||
classname of the default MediaWiki\Logger\Spi implementation to be loaded at
|
||||
runtime. This can either be the name of a class implementing the
|
||||
MediaWiki\Logger\Spi with a zero argument constructor or a callable that will
|
||||
return an MediaWiki\Logger\Spi instance. Alternately the
|
||||
MediaWiki\Logger\LoggerFactory::registerProvider() static method can be called
|
||||
to inject an MediaWiki\Logger\Spi instance into the LoggerFactory and bypass
|
||||
the use of the default configuration variable.
|
||||
|
||||
The MediaWiki\Logger\LegacySpi class implements a service provider to generate
|
||||
MediaWiki\Logger\LegacyLogger instances. The MediaWiki\Logger\LegacyLogger
|
||||
class implements the PSR-3 logger interface and provides output and
|
||||
configuration equivalent to the historic logging output of wfDebug,
|
||||
wfDebugLog, wfLogDBError and wfErrorLog. The MediaWiki\Logger\LegacySpi class
|
||||
is the default service provider configured in DefaultSettings.php. It's usage
|
||||
should be transparent for users who are not ready or do not wish to switch to
|
||||
a alternate logging platform.
|
||||
|
||||
The MediaWiki\Logger\MonologSpi class implements a service provider to
|
||||
generate Psr\Log\LoggerInterface instances that use the Monolog [1] logging
|
||||
library. See the PHP docs (or source) for MediaWiki\Logger\MonologSpi for
|
||||
details on the configuration of this provider. The default configuration
|
||||
installs a null handler that will silently discard all logging events. The
|
||||
documentation provided by the class describes a more feature rich logging
|
||||
configuration.
|
||||
|
||||
== Classes ==
|
||||
; MediaWiki\Logger\LoggerFactory
|
||||
: Factory for Psr\Log\LoggerInterface loggers
|
||||
; MediaWiki\Logger\Spi
|
||||
: Service provider interface for MediaWiki\Logger\LoggerFactory
|
||||
; MediaWiki\Logger\NullSpi
|
||||
: MediaWiki\Logger\Spi for creating instances that discard all log events
|
||||
; MediaWiki\Logger\LegacySpi
|
||||
: Service provider for creating MediaWiki\Logger\LegacyLogger instances
|
||||
; MediaWiki\Logger\LegacyLogger
|
||||
: PSR-3 logger that mimics the historical output and configuration of wfDebug,
|
||||
wfErrorLog and other global logging functions.
|
||||
; MediaWiki\Logger\MonologSpi
|
||||
: MediaWiki\Logger\Spi for creating instances backed by the monolog logging library
|
||||
; MediaWiki\Logger\Monolog\LegacyHandler
|
||||
: Monolog handler that replicates the udp2log and file logging
|
||||
functionality of wfErrorLog()
|
||||
; MediaWiki\Logger\Monolog\WikiProcessor
|
||||
: Monolog log processer that adds host: wfHostname() and wiki: wfWikiID()
|
||||
to all records
|
||||
|
||||
== Globals ==
|
||||
; $wgMWLoggerDefaultSpi
|
||||
: Specification for creating the default service provider interface to use
|
||||
with MediaWiki\Logger\LoggerFactory
|
||||
|
||||
[0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
|
||||
[1]: https://github.com/Seldaek/monolog
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
MWLoggerFactory implements a PSR-3 [0] compatible message logging system.
|
||||
|
||||
Named Psr\Log\LoggerInterface instances can be obtained from the
|
||||
MWLoggerFactory::getInstance() static method. MWLoggerFactory expects a class
|
||||
implementing the MWLoggerSpi interface to act as a factory for new
|
||||
Psr\Log\LoggerInterface instances.
|
||||
|
||||
The "Spi" in MWLoggerSpi stands for "service provider interface". A SPI is
|
||||
an API intended to be implemented or extended by a third party. This software
|
||||
design pattern is intended to enable framework extension and replaceable
|
||||
components. It is specifically used in the MWLoggerFactory service to allow
|
||||
alternate PSR-3 logging implementations to be easily integrated with
|
||||
MediaWiki.
|
||||
|
||||
The MWLoggerFactory::getInstance() static method is the means by which most
|
||||
code acquires a Psr\Log\LoggerInterface instance. This in turn delegates
|
||||
creation of Psr\Log\LoggerInterface instances to a class implementing the
|
||||
MWLoggerSpi service provider interface.
|
||||
|
||||
The service provider interface allows the backend logging library to be
|
||||
implemented in multiple ways. The $wgMWLoggerDefaultSpi global provides the
|
||||
classname of the default MWLoggerSpi implementation to be loaded at runtime.
|
||||
This can either be the name of a class implementing the MWLoggerSpi with
|
||||
a zero argument constructor or a callable that will return an MWLoggerSpi
|
||||
instance. Alternately the MWLoggerFactory::registerProvider method can be
|
||||
called to inject an MWLoggerSpi instance into MWLoggerFactory and bypass the
|
||||
use of this configuration variable.
|
||||
|
||||
The MWLoggerLegacySpi class implements a service provider to generate
|
||||
MWLoggerLegacyLogger instances. The MWLoggerLegacyLogger class implements the
|
||||
PSR-3 logger interface and provides output and configuration equivalent to the
|
||||
historic logging output of wfDebug, wfDebugLog, wfLogDBError and wfErrorLog.
|
||||
The MWLoggerLegacySpi class is the default service provider configured in
|
||||
DefaultSettings.php. It's usage should be transparent for users who are not
|
||||
ready or do not wish to switch to a alternate logging platform.
|
||||
|
||||
The MWLoggerMonologSpi class implements a service provider to generate
|
||||
Psr\Log\LoggerInterface instances that use the Monolog [1] logging library.
|
||||
See the PHP docs (or source) for MWLoggerMonologSpi for details on the
|
||||
configuration of this provider. The default configuration installs a null
|
||||
handler that will silently discard all logging events. The documentation
|
||||
provided by the class describes a more feature rich logging configuration.
|
||||
|
||||
== Classes ==
|
||||
; MWLoggerFactory
|
||||
: Factory for Psr\Log\LoggerInterface loggers
|
||||
; MWLoggerSpi
|
||||
: Service provider interface for MWLoggerFactory
|
||||
; MWLoggerNullSpi
|
||||
: MWLoggerSpi for creating instances that discard all log events
|
||||
; MWLoggerLegacySpi
|
||||
: Service provider for creating MWLoggerLegacyLogger instances
|
||||
; MWLoggerLegacyLogger
|
||||
: PSR-3 logger that mimics the historical output and configuration of wfDebug,
|
||||
wfErrorLog and other global logging functions.
|
||||
; MWLoggerMonologSpi
|
||||
: MWLoggerSpi for creating instances backed by the monolog logging library
|
||||
; MwLoggerMonologHandler
|
||||
: Monolog handler that replicates the udp2log and file logging
|
||||
functionality of wfErrorLog()
|
||||
; MwLoggerMonologProcessor
|
||||
: Monolog log processer that adds host: wfHostname() and wiki: wfWikiID()
|
||||
to all records
|
||||
|
||||
== Globals ==
|
||||
; $wgMWLoggerDefaultSpi
|
||||
: Specification for creating the default service provider interface to use
|
||||
with MWLoggerFactory
|
||||
|
||||
[0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
|
||||
[1]: https://github.com/Seldaek/monolog
|
||||
|
|
@ -5303,16 +5303,16 @@ $wgDebugLogGroups = array();
|
|||
*
|
||||
* The value should be an array suitable for use with
|
||||
* ObjectFactory::getObjectFromSpec(). The created object is expected to
|
||||
* implement the MWLoggerSpi interface. See ObjectFactory for additional
|
||||
* implement the MediaWiki\Logger\Spi interface. See ObjectFactory for additional
|
||||
* details.
|
||||
*
|
||||
* Alternately the MWLoggerFactory::registerProvider method can be called to
|
||||
* inject an MWLoggerSpi instance into MWLoggerFactory and bypass the use of
|
||||
* this configuration variable entirely.
|
||||
* Alternately the MediaWiki\Logger\LoggerFactory::registerProvider method can
|
||||
* be called to inject an MediaWiki\Logger\Spi instance into the LoggerFactory
|
||||
* and bypass the use of this configuration variable entirely.
|
||||
*
|
||||
* @par To completely disable logging:
|
||||
* @code
|
||||
* $wgMWLoggerDefaultSpi = array( 'class' => 'MWLoggerNullSpi' );
|
||||
* $wgMWLoggerDefaultSpi = array( 'class' => '\\MediaWiki\\Logger\\NullSpi' );
|
||||
* @endcode
|
||||
*
|
||||
* @since 1.25
|
||||
|
|
@ -5320,7 +5320,7 @@ $wgDebugLogGroups = array();
|
|||
* @see MwLogger
|
||||
*/
|
||||
$wgMWLoggerDefaultSpi = array(
|
||||
'class' => 'MWLoggerLegacySpi',
|
||||
'class' => '\\MediaWiki\\Logger\\LegacySpi',
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
|
|||
|
||||
use Liuggio\StatsdClient\StatsdClient;
|
||||
use Liuggio\StatsdClient\Sender\SocketSender;
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
|
||||
// Hide compatibility functions from Doxygen
|
||||
/// @cond
|
||||
|
|
@ -1051,7 +1052,7 @@ function wfDebug( $text, $dest = 'all', array $context = array() ) {
|
|||
$context['prefix'] = $wgDebugLogPrefix;
|
||||
}
|
||||
|
||||
$logger = MWLoggerFactory::getInstance( 'wfDebug' );
|
||||
$logger = LoggerFactory::getInstance( 'wfDebug' );
|
||||
$logger->debug( $text, $context );
|
||||
}
|
||||
|
||||
|
|
@ -1151,7 +1152,7 @@ function wfDebugLog(
|
|||
|
||||
$text = trim( $text );
|
||||
|
||||
$logger = MWLoggerFactory::getInstance( $logGroup );
|
||||
$logger = LoggerFactory::getInstance( $logGroup );
|
||||
$context['private'] = ( $dest === 'private' );
|
||||
$logger->info( $text, $context );
|
||||
}
|
||||
|
|
@ -1165,7 +1166,7 @@ function wfDebugLog(
|
|||
* @param array $context Additional logging context data
|
||||
*/
|
||||
function wfLogDBError( $text, array $context = array() ) {
|
||||
$logger = MWLoggerFactory::getInstance( 'wfLogDBError' );
|
||||
$logger = LoggerFactory::getInstance( 'wfLogDBError' );
|
||||
$logger->error( trim( $text ), $context );
|
||||
}
|
||||
|
||||
|
|
@ -1224,11 +1225,11 @@ function wfLogWarning( $msg, $callerOffset = 1, $level = E_USER_WARNING ) {
|
|||
* @param string $file Filename
|
||||
* @param array $context Additional logging context data
|
||||
* @throws MWException
|
||||
* @deprecated since 1.25 Use MWLoggerLegacyLogger::emit or UDPTransport
|
||||
* @deprecated since 1.25 Use MediaWiki\Logger\LegacyLogger::emit or UDPTransport
|
||||
*/
|
||||
function wfErrorLog( $text, $file, array $context = array() ) {
|
||||
wfDeprecated( __METHOD__, '1.25' );
|
||||
$logger = MWLoggerFactory::getInstance( 'wfErrorLog' );
|
||||
$logger = LoggerFactory::getInstance( 'wfErrorLog' );
|
||||
$context['destination'] = $file;
|
||||
$logger->info( trim( $text ), $context );
|
||||
}
|
||||
|
|
@ -1303,7 +1304,7 @@ function wfLogProfilingData() {
|
|||
|
||||
$ctx['output'] = $profiler->getOutput();
|
||||
|
||||
$log = MWLoggerFactory::getInstance( 'profileoutput' );
|
||||
$log = LoggerFactory::getInstance( 'profileoutput' );
|
||||
$log->info( "Elapsed: {elapsed}; URL: <{url}>\n{output}", $ctx );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
|
||||
/**
|
||||
* The MediaWiki class is the helper class for the index.php entry point.
|
||||
*/
|
||||
|
|
@ -478,7 +480,7 @@ class MediaWiki {
|
|||
$wgTitle = $title;
|
||||
|
||||
$trxProfiler = Profiler::instance()->getTransactionProfiler();
|
||||
$trxProfiler->setLogger( MWLoggerFactory::getInstance( 'DBPerformance' ) );
|
||||
$trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
|
||||
|
||||
// Aside from rollback, master queries should not happen on GET requests.
|
||||
// Periodic or "in passing" updates on GET should use the job queue.
|
||||
|
|
@ -618,7 +620,7 @@ class MediaWiki {
|
|||
$n = intval( $jobRunRate );
|
||||
}
|
||||
|
||||
$runJobsLogger = MWLoggerFactory::getInstance( 'runJobs' );
|
||||
$runJobsLogger = LoggerFactory::getInstance( 'runJobs' );
|
||||
|
||||
if ( !$this->config->get( 'RunJobsAsync' ) ) {
|
||||
// Fall back to running the job here while the user waits
|
||||
|
|
|
|||
|
|
@ -18,6 +18,13 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger;
|
||||
|
||||
use MWDebug;
|
||||
use Psr\Log\AbstractLogger;
|
||||
use Psr\Log\LogLevel;
|
||||
use UDPTransport;
|
||||
|
||||
/**
|
||||
* PSR-3 logger that mimics the historic implementation of MediaWiki's
|
||||
* wfErrorLog logging implementation.
|
||||
|
|
@ -31,15 +38,12 @@
|
|||
* See documentation in DefaultSettings.php for detailed explanations of each
|
||||
* variable.
|
||||
*
|
||||
* @see MWLoggerFactory
|
||||
* @see \MediaWiki\Logger\LoggerFactory
|
||||
* @since 1.25
|
||||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2014 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
use Psr\Log\AbstractLogger;
|
||||
use Psr\Log\LogLevel;
|
||||
|
||||
class MWLoggerLegacyLogger extends AbstractLogger {
|
||||
class LegacyLogger extends AbstractLogger {
|
||||
|
||||
/**
|
||||
* @var string $channel
|
||||
|
|
@ -18,23 +18,24 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger;
|
||||
|
||||
/**
|
||||
* MWLoggerFactory service provider that creates MWLoggerLegacyLogger
|
||||
* instances.
|
||||
* LoggerFactory service provider that creates LegacyLogger instances.
|
||||
*
|
||||
* Usage:
|
||||
* @code
|
||||
* $wgMWLoggerDefaultSpi = array(
|
||||
* 'class' => 'MWLoggerLegacySpi',
|
||||
* 'class' => '\\MediaWiki\\Logger\\LegacySpi',
|
||||
* );
|
||||
* @endcode
|
||||
*
|
||||
* @see MWLoggerFactory
|
||||
* @see \MediaWiki\Logger\LoggerFactory
|
||||
* @since 1.25
|
||||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2014 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
class MWLoggerLegacySpi implements MWLoggerSpi {
|
||||
class LegacySpi implements Spi {
|
||||
|
||||
/**
|
||||
* @var array $singletons
|
||||
|
|
@ -50,7 +51,7 @@ class MWLoggerLegacySpi implements MWLoggerSpi {
|
|||
*/
|
||||
public function getLogger( $channel ) {
|
||||
if ( !isset( $this->singletons[$channel] ) ) {
|
||||
$this->singletons[$channel] = new MWLoggerLegacyLogger( $channel );
|
||||
$this->singletons[$channel] = new LegacyLogger( $channel );
|
||||
}
|
||||
return $this->singletons[$channel];
|
||||
}
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* @file
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* MWLoggerFactory.
|
||||
*
|
||||
* @deprecated since 1.25 Use MWLoggerFactory
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLogger {
|
||||
|
||||
/**
|
||||
* Register a service provider to create new \Psr\Log\LoggerInterface
|
||||
* instances.
|
||||
*
|
||||
* @param MWLoggerSpi $provider Provider to register
|
||||
* @deprecated since 1.25 Use MWLoggerFactory::registerProvider()
|
||||
*/
|
||||
public static function registerProvider( MWLoggerSpi $provider ) {
|
||||
MWLoggerFactory::registerProvider( $provider );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the registered service provider.
|
||||
*
|
||||
* If called before any service provider has been registered, it will
|
||||
* attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
|
||||
* MWLoggerSpi registration. $wgMWLoggerDefaultSpi is expected to be an
|
||||
* array usable by ObjectFactory::getObjectFromSpec() to create a class.
|
||||
*
|
||||
* @return MWLoggerSpi
|
||||
* @see registerProvider()
|
||||
* @see ObjectFactory::getObjectFromSpec()
|
||||
* @deprecated since 1.25 Use MWLoggerFactory::getProvider()
|
||||
*/
|
||||
public static function getProvider() {
|
||||
return MWLoggerFactory::getProvider();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a named logger instance from the currently configured logger factory.
|
||||
*
|
||||
* @param string $channel Logger channel (name)
|
||||
* @return \Psr\Log\LoggerInterface
|
||||
* @deprecated since 1.25 Use MWLoggerFactory::getInstance()
|
||||
*/
|
||||
public static function getInstance( $channel ) {
|
||||
return MWLoggerFactory::getInstance( $channel );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -18,33 +18,36 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger;
|
||||
|
||||
use ObjectFactory;
|
||||
|
||||
/**
|
||||
* PSR-3 logger instance factory.
|
||||
*
|
||||
* Creation of \Psr\Log\LoggerInterface instances is managed via the
|
||||
* MWLoggerFactory::getInstance() static method which in turn delegates to the
|
||||
* LoggerFactory::getInstance() static method which in turn delegates to the
|
||||
* currently registered service provider.
|
||||
*
|
||||
* A service provider is any class implementing the MWLoggerSpi interface.
|
||||
* A service provider is any class implementing the Spi interface.
|
||||
* There are two possible methods of registering a service provider. The
|
||||
* MWLoggerFactory::registerProvider() static method can be called at any time
|
||||
* to change the service provider. If MWLoggerFactory::getInstance() is called
|
||||
* LoggerFactory::registerProvider() static method can be called at any time
|
||||
* to change the service provider. If LoggerFactory::getInstance() is called
|
||||
* before any service provider has been registered, it will attempt to use the
|
||||
* $wgMWLoggerDefaultSpi global to bootstrap MWLoggerSpi registration.
|
||||
* $wgMWLoggerDefaultSpi global to bootstrap Spi registration.
|
||||
* $wgMWLoggerDefaultSpi is expected to be an array usable by
|
||||
* ObjectFactory::getObjectFromSpec() to create a class.
|
||||
*
|
||||
* @see MWLoggerSpi
|
||||
* @see \MediaWiki\Logger\Spi
|
||||
* @since 1.25
|
||||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2014 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
class MWLoggerFactory {
|
||||
class LoggerFactory {
|
||||
|
||||
/**
|
||||
* Service provider.
|
||||
* @var MWLoggerSpi $spi
|
||||
* @var Spi $spi
|
||||
*/
|
||||
private static $spi;
|
||||
|
||||
|
|
@ -53,9 +56,9 @@ class MWLoggerFactory {
|
|||
* Register a service provider to create new \Psr\Log\LoggerInterface
|
||||
* instances.
|
||||
*
|
||||
* @param MWLoggerSpi $provider Provider to register
|
||||
* @param Spi $provider Provider to register
|
||||
*/
|
||||
public static function registerProvider( MWLoggerSpi $provider ) {
|
||||
public static function registerProvider( Spi $provider ) {
|
||||
self::$spi = $provider;
|
||||
}
|
||||
|
||||
|
|
@ -65,10 +68,10 @@ class MWLoggerFactory {
|
|||
*
|
||||
* If called before any service provider has been registered, it will
|
||||
* attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
|
||||
* MWLoggerSpi registration. $wgMWLoggerDefaultSpi is expected to be an
|
||||
* Spi registration. $wgMWLoggerDefaultSpi is expected to be an
|
||||
* array usable by ObjectFactory::getObjectFromSpec() to create a class.
|
||||
*
|
||||
* @return MWLoggerSpi
|
||||
* @return Spi
|
||||
* @see registerProvider()
|
||||
* @see ObjectFactory::getObjectFromSpec()
|
||||
*/
|
||||
|
|
@ -92,11 +95,14 @@ class MWLoggerFactory {
|
|||
*/
|
||||
public static function getInstance( $channel ) {
|
||||
if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) {
|
||||
$message = <<<TXT
|
||||
MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging library</a> to be present. This library is not embedded directly in MediaWiki's git repository and must be installed separately by the end user.
|
||||
|
||||
Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
|
||||
TXT;
|
||||
$message = (
|
||||
'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
|
||||
"library</a> to be present. This library is not embedded directly in MediaWiki's " .
|
||||
"git repository and must be installed separately by the end user.\n\n" .
|
||||
'Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
|
||||
'#Fetch_external_libraries">mediawiki.org</a> for help on installing ' .
|
||||
'the required components.'
|
||||
);
|
||||
echo $message;
|
||||
trigger_error( $message, E_USER_ERROR );
|
||||
die( 1 );
|
||||
|
|
@ -18,8 +18,13 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger;
|
||||
|
||||
use Monolog\Logger;
|
||||
use ObjectFactory;
|
||||
|
||||
/**
|
||||
* MWLoggerFactory service provider that creates loggers implemented by
|
||||
* LoggerFactory service provider that creates loggers implemented by
|
||||
* Monolog.
|
||||
*
|
||||
* Configured using an array of configuration data with the keys 'loggers',
|
||||
|
|
@ -30,11 +35,11 @@
|
|||
* section.
|
||||
*
|
||||
* Configuration will most typically be provided in the $wgMWLoggerDefaultSpi
|
||||
* global configuration variable used by MWLoggerFactory to construct its
|
||||
* global configuration variable used by LoggerFactory to construct its
|
||||
* default SPI provider:
|
||||
* @code
|
||||
* $wgMWLoggerDefaultSpi = array(
|
||||
* 'class' => 'MWLoggerMonologSpi',
|
||||
* 'class' => '\\MediaWiki\\Logger\\MonologSpi',
|
||||
* 'args' => array( array(
|
||||
* 'loggers' => array(
|
||||
* '@default' => array(
|
||||
|
|
@ -48,7 +53,7 @@
|
|||
* ),
|
||||
* 'processors' => array(
|
||||
* 'wiki' => array(
|
||||
* 'class' => 'MWLoggerMonologProcessor',
|
||||
* 'class' => '\\MediaWiki\\Logger\\Monolog\\WikiProcessor',
|
||||
* ),
|
||||
* 'psr' => array(
|
||||
* 'class' => '\\Monolog\\Processor\\PsrLogMessageProcessor',
|
||||
|
|
@ -81,7 +86,7 @@
|
|||
* 'formatter' => 'logstash',
|
||||
* ),
|
||||
* 'udp2log' => array(
|
||||
* 'class' => 'MWLoggerMonologHandler',
|
||||
* 'class' => '\\MediaWiki\\Logger\\Monolog\\LegacyHandler',
|
||||
* 'args' => array(
|
||||
* 'udp://127.0.0.1:8420/mediawiki
|
||||
* ),
|
||||
|
|
@ -106,7 +111,7 @@
|
|||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2014 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
class MWLoggerMonologSpi implements MWLoggerSpi {
|
||||
class MonologSpi implements Spi {
|
||||
|
||||
/**
|
||||
* @var array $singletons
|
||||
|
|
@ -178,7 +183,7 @@ class MWLoggerMonologSpi implements MWLoggerSpi {
|
|||
* @return \Monolog\Logger
|
||||
*/
|
||||
protected function createLogger( $channel, $spec ) {
|
||||
$obj = new \Monolog\Logger( $channel );
|
||||
$obj = new Logger( $channel );
|
||||
|
||||
if ( isset( $spec['processors'] ) ) {
|
||||
foreach ( $spec['processors'] as $processor ) {
|
||||
|
|
@ -18,24 +18,27 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger;
|
||||
|
||||
use Psr\Log\NullLogger;
|
||||
|
||||
/**
|
||||
* MWLoggerFactory service provider that creates \Psr\Log\NullLogger
|
||||
* LoggerFactory service provider that creates \Psr\Log\NullLogger
|
||||
* instances. A NullLogger silently discards all log events sent to it.
|
||||
*
|
||||
* Usage:
|
||||
* @code
|
||||
* $wgMWLoggerDefaultSpi = array(
|
||||
* 'class' => 'MWLoggerNullSpi',
|
||||
* 'class' => '\\MediaWiki\\Logger\\NullSpi',
|
||||
* );
|
||||
* @endcode
|
||||
*
|
||||
* @see MWLoggerFactory
|
||||
* @see \MediaWiki\Logger\LoggerFactory
|
||||
* @since 1.25
|
||||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2014 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
class MWLoggerNullSpi implements MWLoggerSpi {
|
||||
class NullSpi implements Spi {
|
||||
|
||||
/**
|
||||
* @var \Psr\Log\NullLogger $singleton
|
||||
|
|
@ -44,7 +47,7 @@ class MWLoggerNullSpi implements MWLoggerSpi {
|
|||
|
||||
|
||||
public function __construct() {
|
||||
$this->singleton = new \Psr\Log\NullLogger();
|
||||
$this->singleton = new NullLogger();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
171
includes/debug/logger/Shims.php
Normal file
171
includes/debug/logger/Shims.php
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
<?php
|
||||
/**
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*
|
||||
* @file
|
||||
*/
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* MediaWiki\Logger\LoggerFactory.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\LoggerFactory
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLogger {
|
||||
|
||||
/**
|
||||
* Register a service provider to create new \Psr\Log\LoggerInterface
|
||||
* instances.
|
||||
*
|
||||
* @param \MediaWiki\Logger\Spi $provider Provider to register
|
||||
* @deprecated since 1.25 Use MediaWiki\Logger\LoggerFactory::registerProvider()
|
||||
*/
|
||||
public static function registerProvider( \MediaWiki\Logger\Spi $provider ) {
|
||||
\MediaWiki\Logger\LoggerFactory::registerProvider( $provider );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the registered service provider.
|
||||
*
|
||||
* If called before any service provider has been registered, it will
|
||||
* attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
|
||||
* MWLoggerSpi registration. $wgMWLoggerDefaultSpi is expected to be an
|
||||
* array usable by ObjectFactory::getObjectFromSpec() to create a class.
|
||||
*
|
||||
* @return \MediaWiki\Logger\Spi
|
||||
* @see registerProvider()
|
||||
* @see ObjectFactory::getObjectFromSpec()
|
||||
* @deprecated since 1.25 Use MediaWiki\Logger\LoggerFactory::getProvider()
|
||||
*/
|
||||
public static function getProvider() {
|
||||
return \MediaWiki\Logger\LoggerFactory::getProvider();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a named logger instance from the currently configured logger factory.
|
||||
*
|
||||
* @param string $channel Logger channel (name)
|
||||
* @return \Psr\Log\LoggerInterface
|
||||
* @deprecated since 1.25 Use MediaWiki\Logger\LoggerFactory::getInstance()
|
||||
*/
|
||||
public static function getInstance( $channel ) {
|
||||
return \MediaWiki\Logger\LoggerFactory::getInstance( $channel );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\LoggerFactory
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerFactory extends \MediaWiki\Logger\LoggerFactory {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\LegacyLogger
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerLegacyLogger extends \MediaWiki\Logger\LegacyLogger {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\LegacySpi
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerLegacySpi extends \MediaWiki\Logger\LegacySpi {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\LegacyHandler
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerMonologHandler extends \MediaWiki\Logger\Monolog\LegacyHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\LegacyFormatter
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerMonologLegacyFormatter extends \MediaWiki\Logger\Monolog\LegacyFormatter {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\WikiProcessor
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerMonologProcessor extends \MediaWiki\Logger\Monolog\WikiProcessor {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\MonologSpi
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerMonologSpi extends \MediaWiki\Logger\MonologSpi {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\Monolog\SyslogHandler
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerMonologSyslogHandler extends \MediaWiki\Logger\Monolog\SyslogHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\NullSpi
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
class MWLoggerNullSpi extends \MediaWiki\Logger\NullSpi {
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatibility stub for usage from before the introduction of
|
||||
* the MediaWiki\Logger namespace.
|
||||
*
|
||||
* @deprecated since 1.25 Use \MediaWiki\Logger\Spi
|
||||
* @todo This class should be removed before the 1.25 final release.
|
||||
*/
|
||||
interface MWLoggerSpi extends \MediaWiki\Logger\Spi {
|
||||
}
|
||||
|
|
@ -18,6 +18,8 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger;
|
||||
|
||||
/**
|
||||
* Service provider interface for \Psr\Log\LoggerInterface implementation
|
||||
* libraries.
|
||||
|
|
@ -25,14 +27,14 @@
|
|||
* MediaWiki can be configured to use a class implementing this interface to
|
||||
* create new \Psr\Log\LoggerInterface instances via either the
|
||||
* $wgMWLoggerDefaultSpi global variable or code that constructs an instance
|
||||
* and registers it via the MWLoggerFactory::registerProvider() static method.
|
||||
* and registers it via the LoggerFactory::registerProvider() static method.
|
||||
*
|
||||
* @see MWLoggerFactory
|
||||
* @see \MediaWiki\Logger\LoggerFactory
|
||||
* @since 1.25
|
||||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2014 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
interface MWLoggerSpi {
|
||||
interface Spi {
|
||||
|
||||
/**
|
||||
* Get a logger instance.
|
||||
|
|
|
|||
|
|
@ -18,17 +18,22 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger\Monolog;
|
||||
|
||||
use MediaWiki\Logger\LegacyLogger;
|
||||
use Monolog\Formatter\NormalizerFormatter;
|
||||
|
||||
/**
|
||||
* Log message formatter that mimics the legacy log message formatting of
|
||||
* `wfDebug`, `wfDebugLog`, `wfLogDBError` and `wfErrorLog` global functions by
|
||||
* delegating the formatting to MWLoggerLegacyLogger.
|
||||
* delegating the formatting to \MediaWiki\Logger\LegacyLogger.
|
||||
*
|
||||
* @since 1.25
|
||||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2013 Bryan Davis and Wikimedia Foundation.
|
||||
* @see MWLoggerLegacyLogger
|
||||
* @see \MediaWiki\Logger\LegacyLogger
|
||||
*/
|
||||
class MWLoggerMonologLegacyFormatter extends \Monolog\Formatter\NormalizerFormatter {
|
||||
class LegacyFormatter extends NormalizerFormatter {
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct( 'c' );
|
||||
|
|
@ -36,7 +41,7 @@ class MWLoggerMonologLegacyFormatter extends \Monolog\Formatter\NormalizerFormat
|
|||
|
||||
public function format( array $record ) {
|
||||
$normalized = parent::format( $record );
|
||||
return MWLoggerLegacyLogger::format(
|
||||
return LegacyLogger::format(
|
||||
$normalized['channel'], $normalized['message'], $normalized
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,13 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger\Monolog;
|
||||
|
||||
use LogicException;
|
||||
use MediaWiki\Logger\LegacyLogger;
|
||||
use Monolog\Handler\AbstractProcessingHandler;
|
||||
use Monolog\Logger;
|
||||
use UnexpectedValueException;
|
||||
|
||||
/**
|
||||
* Log handler that replicates the behavior of MediaWiki's wfErrorLog()
|
||||
|
|
@ -40,7 +47,7 @@
|
|||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2013 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler {
|
||||
class LegacyHandler extends AbstractProcessingHandler {
|
||||
|
||||
/**
|
||||
* Log sink descriptor
|
||||
|
|
@ -90,7 +97,7 @@ class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler
|
|||
public function __construct(
|
||||
$stream,
|
||||
$useLegacyFilter = false,
|
||||
$level = \Monolog\Logger::DEBUG,
|
||||
$level = Logger::DEBUG,
|
||||
$bubble = true
|
||||
) {
|
||||
parent::__construct( $level, $bubble );
|
||||
|
|
@ -175,7 +182,7 @@ class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler
|
|||
|
||||
protected function write( array $record ) {
|
||||
if ( $this->useLegacyFilter &&
|
||||
!MWLoggerLegacyLogger::shouldEmit(
|
||||
!LegacyLogger::shouldEmit(
|
||||
$record['channel'], $record['message'],
|
||||
$record['level'], $record
|
||||
) ) {
|
||||
|
|
@ -213,7 +220,8 @@ class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler
|
|||
}
|
||||
|
||||
socket_sendto(
|
||||
$this->sink, $text, strlen( $text ), 0, $this->host, $this->port );
|
||||
$this->sink, $text, strlen( $text ), 0, $this->host, $this->port
|
||||
);
|
||||
|
||||
} else {
|
||||
fwrite( $this->sink, $text );
|
||||
|
|
@ -232,5 +240,4 @@ class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler
|
|||
}
|
||||
$this->sink = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -18,6 +18,8 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger\Monolog;
|
||||
|
||||
use Monolog\Handler\SyslogUdpHandler;
|
||||
use Monolog\Logger;
|
||||
|
||||
|
|
@ -44,7 +46,7 @@ use Monolog\Logger;
|
|||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2015 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
class MWLoggerMonologSyslogHandler extends SyslogUdpHandler {
|
||||
class SyslogHandler extends SyslogUdpHandler {
|
||||
|
||||
/**
|
||||
* @var string $appname
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger\Monolog;
|
||||
|
||||
/**
|
||||
* Injects `wfHostname()` and `wfWikiID()` in all records.
|
||||
*
|
||||
|
|
@ -25,7 +27,7 @@
|
|||
* @author Bryan Davis <bd808@wikimedia.org>
|
||||
* @copyright © 2013 Bryan Davis and Wikimedia Foundation.
|
||||
*/
|
||||
class MWLoggerMonologProcessor {
|
||||
class WikiProcessor {
|
||||
|
||||
/**
|
||||
* @param array $record
|
||||
|
|
@ -18,6 +18,8 @@
|
|||
* @file
|
||||
*/
|
||||
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
|
||||
/**
|
||||
* Show an error that looks like an HTTP server error.
|
||||
* Replacement for wfHttpError().
|
||||
|
|
@ -81,7 +83,7 @@ class HttpError extends MWException {
|
|||
}
|
||||
|
||||
private function doLog() {
|
||||
$logger = MWLoggerFactory::getInstance( 'HttpError' );
|
||||
$logger = LoggerFactory::getInstance( 'HttpError' );
|
||||
$content = $this->content;
|
||||
|
||||
if ( $content instanceof Message ) {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
* @ingroup JobQueue
|
||||
*/
|
||||
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
use Psr\Log\LoggerAwareInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
|
|
@ -58,7 +59,7 @@ class JobRunner implements LoggerAwareInterface {
|
|||
*/
|
||||
public function __construct( LoggerInterface $logger = null ) {
|
||||
if ( $logger === null ) {
|
||||
$logger = MWLoggerFactory::getInstance( 'runJobs' );
|
||||
$logger = LoggerFactory::getInstance( 'runJobs' );
|
||||
}
|
||||
$this->setLogger( $logger );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
* @ingroup Cache
|
||||
*/
|
||||
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
|
||||
/**
|
||||
* Functions to get cache objects
|
||||
*
|
||||
|
|
@ -82,11 +84,11 @@ class ObjectCache {
|
|||
*/
|
||||
static function newFromParams( $params ) {
|
||||
if ( isset( $params['loggroup'] ) ) {
|
||||
$params['logger'] = MWLoggerFactory::getInstance( $params['loggroup'] );
|
||||
$params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
|
||||
} else {
|
||||
// For backwards-compatability with custom parameters, lets not
|
||||
// have all logging suddenly disappear
|
||||
$params['logger'] = MWLoggerFactory::getInstance( 'objectcache' );
|
||||
$params['logger'] = LoggerFactory::getInstance( 'objectcache' );
|
||||
}
|
||||
if ( isset( $params['factory'] ) ) {
|
||||
return call_user_func( $params['factory'], $params );
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
* @author Aaron Schulz
|
||||
*/
|
||||
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
|
||||
/**
|
||||
* Special page designed for running background tasks (internal use only)
|
||||
*
|
||||
|
|
@ -89,7 +91,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
|
|||
|
||||
// Do all of the specified tasks...
|
||||
if ( in_array( 'jobs', explode( '|', $params['tasks'] ) ) ) {
|
||||
$runner = new JobRunner( MWLoggerFactory::getInstance( 'runJobs' ) );
|
||||
$runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
|
||||
$response = $runner->run( array(
|
||||
'type' => $params['type'],
|
||||
'maxJobs' => $params['maxjobs'] ? $params['maxjobs'] : 1,
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
require_once __DIR__ . '/Maintenance.php';
|
||||
|
||||
use MediaWiki\Logger\LoggerFactory;
|
||||
|
||||
/**
|
||||
* Maintenance script that runs pending jobs.
|
||||
*
|
||||
|
|
@ -68,7 +70,7 @@ class RunJobs extends Maintenance {
|
|||
|
||||
$json = ( $this->getOption( 'result' ) === 'json' );
|
||||
|
||||
$runner = new JobRunner( MWLoggerFactory::getInstance( 'runJobs' ) );
|
||||
$runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
|
||||
if ( !$json ) {
|
||||
$runner->setDebugHandler( array( $this, 'debugInternal' ) );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
* @ingroup Maintenance ExternalStorage
|
||||
*/
|
||||
|
||||
use MediaWiki\Logger\LegacyLogger;
|
||||
|
||||
$optionsWithArgs = RecompressTracked::getOptionsWithArgs();
|
||||
require __DIR__ . '/../commandLine.inc';
|
||||
|
||||
|
|
@ -141,7 +143,7 @@ class RecompressTracked {
|
|||
$header .= "({$this->slaveId})";
|
||||
}
|
||||
$header .= ' ' . wfWikiID();
|
||||
MWLoggerLegacyLogger::emit( sprintf( "%-50s %s\n", $header, $msg ), $file );
|
||||
LegacyLogger::emit( sprintf( "%-50s %s\n", $header, $msg ), $file );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,17 +17,21 @@
|
|||
*
|
||||
* @file
|
||||
*/
|
||||
|
||||
namespace MediaWiki\Logger;
|
||||
|
||||
use MediaWikiTestCase;
|
||||
use Psr\Log\LogLevel;
|
||||
|
||||
class MWLoggerLegacyLoggerTest extends MediaWikiTestCase {
|
||||
class LegacyLoggerTest extends MediaWikiTestCase {
|
||||
|
||||
/**
|
||||
* @covers MWLoggerLegacyLogger::interpolate
|
||||
* @covers LegacyLogger::interpolate
|
||||
* @dataProvider provideInterpolate
|
||||
*/
|
||||
public function testInterpolate( $message, $context, $expect ) {
|
||||
$this->assertEquals(
|
||||
$expect, MWLoggerLegacyLogger::interpolate( $message, $context ) );
|
||||
$expect, LegacyLogger::interpolate( $message, $context ) );
|
||||
}
|
||||
|
||||
public function provideInterpolate() {
|
||||
|
|
@ -68,14 +72,14 @@ class MWLoggerLegacyLoggerTest extends MediaWikiTestCase {
|
|||
}
|
||||
|
||||
/**
|
||||
* @covers MWLoggerLegacyLogger::shouldEmit
|
||||
* @covers LegacyLogger::shouldEmit
|
||||
* @dataProvider provideShouldEmit
|
||||
*/
|
||||
public function testShouldEmit( $level, $config, $expected ) {
|
||||
$this->setMwGlobals( 'wgDebugLogGroups', array( 'fakechannel' => $config ) );
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
MWLoggerLegacyLogger::shouldEmit( 'fakechannel', 'some message', $level, array() )
|
||||
LegacyLogger::shouldEmit( 'fakechannel', 'some message', $level, array() )
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue