<?php
/**
- * @section LICENSE
* 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
* @file
*/
+
/**
- * PSR-3 logging service.
- *
- * This class provides a service interface for logging system events. The
- * MWLogger class itself is intended to be a thin wrapper around another PSR-3
- * compliant logging library. Creation of MWLogger instances is managed via
- * the MWLogger::getInstance() static method which in turn delegates to the
- * currently registered service provider.
- *
- * A service provider is any class implementing the MWLoggerSpi interface.
- * There are two possible methods of registering a service provider. The
- * MWLogger::registerProvider() static method can be called at any time to
- * change the service provider. If MWLogger::getInstance() is called before
- * any service provider has been registered, it will attempt to use the
- * $wgMWLoggerDefaultSpi global to bootstrap MWLoggerSpi registration.
- * $wgMWLoggerDefaultSpi can either be the name of a class implementing the
- * MWLoggerSpi interface with a zero argument constructor or a callable that
- * will return an MWLoggerSpi instance.
+ * Backwards compatibility stub for usage from before the introduction of
+ * MWLoggerFactory.
*
- * @see MWLoggerSpi
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ * @deprecated since 1.25 Use MWLoggerFactory
+ * @todo This class should be removed before the 1.25 final release.
*/
-class MWLogger implements \Psr\Log\LoggerInterface {
-
- /**
- * Service provider.
- * @var MWLoggerSpi $spi
- */
- protected static $spi;
-
+class MWLogger {
/**
- * Wrapped PSR-3 logger instance.
- *
- * @var \Psr\Log\LoggerInterface $delegate
- */
- protected $delegate;
-
-
- /**
- * @param \Psr\Log\LoggerInterface $logger
- */
- public function __construct( \Psr\Log\LoggerInterface $logger ) {
- $this->delegate = $logger;
- }
-
-
- /**
- * Logs with an arbitrary level.
- *
- * @param string|int $level
- * @param string $message
- * @param array $context
- */
- public function log( $level, $message, array $context = array() ) {
- $this->delegate->log( $level, $message, $context );
- }
-
-
- /**
- * System is unusable.
- *
- * @param string $message
- * @param array $context
- */
- public function emergency( $message, array $context = array() ) {
- $this->log( \Psr\Log\LogLevel::EMERGENCY, $message, $context );
- }
-
-
- /**
- * Action must be taken immediately.
- *
- * Example: Entire website down, database unavailable, etc. This should
- * trigger the SMS alerts and wake you up.
- *
- * @param string $message
- * @param array $context
- */
- public function alert( $message, array $context = array() ) {
- $this->log( \Psr\Log\LogLevel::ALERT, $message, $context );
- }
-
-
- /**
- * Critical conditions.
- *
- * Example: Application component unavailable, unexpected exception.
+ * Register a service provider to create new \Psr\Log\LoggerInterface
+ * instances.
*
- * @param string $message
- * @param array $context
- */
- public function critical( $message, array $context = array( ) ) {
- $this->log( \Psr\Log\LogLevel::CRITICAL, $message, $context );
- }
-
-
- /**
- * Runtime errors that do not require immediate action but should typically
- * be logged and monitored.
- *
- * @param string $message
- * @param array $context
- */
- public function error( $message, array $context = array( ) ) {
- $this->log( \Psr\Log\LogLevel::ERROR, $message, $context );
- }
-
-
- /**
- * Exceptional occurrences that are not errors.
- *
- * Example: Use of deprecated APIs, poor use of an API, undesirable things
- * that are not necessarily wrong.
- *
- * @param string $message
- * @param array $context
- */
- public function warning( $message, array $context = array() ) {
- $this->log( \Psr\Log\LogLevel::WARNING, $message, $context );
- }
-
-
- /**
- * Normal but significant events.
- *
- * @param string $message
- * @param array $context
- */
- public function notice( $message, array $context = array() ) {
- $this->log( \Psr\Log\LogLevel::NOTICE, $message, $context );
- }
-
-
- /**
- * Interesting events.
- *
- * Example: User logs in, SQL logs.
- *
- * @param string $message
- * @param array $context
+ * @param MWLoggerSpi $provider Provider to register
+ * @deprecated since 1.25 Use MWLoggerFactory::registerProvider()
*/
- public function info( $message, array $context = array() ) {
- $this->log( \Psr\Log\LogLevel::INFO, $message, $context );
+ public static function registerProvider( MWLoggerSpi $provider ) {
+ MWLoggerFactory::registerProvider( $provider );
}
/**
- * Detailed debug information.
+ * Get the registered service provider.
*
- * @param string $message
- * @param array $context
- */
- public function debug( $message, array $context = array() ) {
- $this->log( \Psr\Log\LogLevel::DEBUG, $message, $context );
- }
-
-
- /**
- * Register a service provider to create new MWLogger instances.
+ * 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.
*
- * @param MWLoggerSpi $provider Provider to register
+ * @return MWLoggerSpi
+ * @see registerProvider()
+ * @see ObjectFactory::getObjectFromSpec()
+ * @deprecated since 1.25 Use MWLoggerFactory::getProvider()
*/
- public static function registerProvider( MWLoggerSpi $provider ) {
- self::$spi = $provider;
+ 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 MWLogger
+ * @return \Psr\Log\LoggerInterface
+ * @deprecated since 1.25 Use MWLoggerFactory::getInstance()
*/
public static function getInstance( $channel ) {
- if ( self::$spi === null ) {
- global $wgMWLoggerDefaultSpi;
- if ( is_callable( $wgMWLoggerDefaultSpi ) ) {
- $provider = $wgMWLoggerDefaultSpi();
- } else {
- $provider = new $wgMWLoggerDefaultSpi();
- }
- self::registerProvider( $provider );
- }
-
- return self::$spi->getLogger( $channel );
+ return MWLoggerFactory::getInstance( $channel );
}
}