2017-04-27 23:56:38 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace MediaWiki\Logger;
|
|
|
|
|
|
|
|
|
|
use Psr\Log\AbstractLogger;
|
2023-02-08 02:02:27 +00:00
|
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
|
use Psr\Log\LogLevel;
|
|
|
|
|
use Wikimedia\Assert\Assert;
|
2017-04-27 23:56:38 +00:00
|
|
|
|
|
|
|
|
/**
|
2023-10-05 04:55:31 +00:00
|
|
|
* Write logs to command-line output (STDERR).
|
|
|
|
|
*
|
|
|
|
|
* The output is supposed to be human-readable, and should be changed as necessary
|
|
|
|
|
* to better achieve that goal.
|
|
|
|
|
*
|
|
|
|
|
* This is developed for use in maintenance/eval.php.
|
|
|
|
|
*
|
|
|
|
|
* @internal For use in MediaWiki core only
|
|
|
|
|
* @since 1.30
|
|
|
|
|
* @ingroup Debug
|
2017-04-27 23:56:38 +00:00
|
|
|
*/
|
|
|
|
|
class ConsoleLogger extends AbstractLogger {
|
2023-02-08 02:02:27 +00:00
|
|
|
private const LEVELS = [
|
|
|
|
|
LogLevel::DEBUG => 0,
|
|
|
|
|
LogLevel::INFO => 1,
|
|
|
|
|
LogLevel::NOTICE => 2,
|
|
|
|
|
LogLevel::WARNING => 3,
|
|
|
|
|
LogLevel::ERROR => 4,
|
|
|
|
|
LogLevel::CRITICAL => 5,
|
|
|
|
|
LogLevel::ALERT => 6,
|
|
|
|
|
LogLevel::EMERGENCY => 7,
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
private string $channel;
|
|
|
|
|
private ?string $minLevel;
|
|
|
|
|
private ?LoggerInterface $forwardTo;
|
2019-09-11 09:30:12 +00:00
|
|
|
|
2019-09-08 16:59:52 +00:00
|
|
|
/**
|
2023-02-08 02:02:27 +00:00
|
|
|
* @param string $channel log channel name.
|
|
|
|
|
* @param string|null $minLevel Minimum PSR-3 level below which messages are ignored.
|
|
|
|
|
* @param LoggerInterface|null $forwardTo Other logger to forward to.
|
2019-09-08 16:59:52 +00:00
|
|
|
*/
|
2023-02-08 02:02:27 +00:00
|
|
|
public function __construct(
|
|
|
|
|
string $channel,
|
|
|
|
|
string $minLevel = null,
|
|
|
|
|
LoggerInterface $forwardTo = null
|
|
|
|
|
) {
|
|
|
|
|
Assert::parameter( $minLevel === null || isset( self::LEVELS[$minLevel] ), '$minLevel',
|
|
|
|
|
'must be a valid, lowercase PSR-3 log level' );
|
|
|
|
|
|
2017-04-27 23:56:38 +00:00
|
|
|
$this->channel = $channel;
|
2023-02-08 02:02:27 +00:00
|
|
|
$this->minLevel = $minLevel;
|
|
|
|
|
$this->forwardTo = $forwardTo;
|
2017-04-27 23:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
2019-09-08 16:59:52 +00:00
|
|
|
/**
|
|
|
|
|
* @inheritDoc
|
|
|
|
|
*/
|
2017-04-27 23:56:38 +00:00
|
|
|
public function log( $level, $message, array $context = [] ) {
|
2023-02-08 02:02:27 +00:00
|
|
|
if ( !$this->minLevel || self::LEVELS[$level] >= self::LEVELS[$this->minLevel] ) {
|
|
|
|
|
fwrite( STDERR, "[$level] " .
|
|
|
|
|
LegacyLogger::format( $this->channel, $message, $context ) );
|
|
|
|
|
}
|
|
|
|
|
if ( $this->forwardTo ) {
|
|
|
|
|
$this->forwardTo->log( $level, $message, $context );
|
|
|
|
|
}
|
2017-04-27 23:56:38 +00:00
|
|
|
}
|
|
|
|
|
}
|