wiki.techinc.nl/includes/debug/logger/ConsoleLogger.php
Gergő Tisza 1c53f5902e psysh: Dump selected log channels
* Extend ConsoleLogger to support filtering by log level and
  forwarding to another logger.
* Extend ConsoleSpi to support filtering by channel/level and
  forwarding to another provider.
* Allow configuring which channels shell.php should log to STDERR
  and at what levels.
* Deprecate shell.php -d, use more meaningful parameter names.
* Change logging behavior so that logging to STDERR doesn't
  prevent normal logging, which seemed like confusing behavior
  (either we should always disable normal logging for shell.php
  or never, it shouldn't depend on whether we log to console).
  Keep old behavior for -d, just in case.

Change-Id: I5d29c95995bf83784c96dd40df9c96e22b9ec73e
2023-02-09 11:35:59 +00:00

61 lines
1.6 KiB
PHP

<?php
namespace MediaWiki\Logger;
use Psr\Log\AbstractLogger;
use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;
use Wikimedia\Assert\Assert;
/**
* A logger which writes to the terminal. The output is supposed to be
* human-readable, and should be changed as necessary to better achieve that
* goal.
*/
class ConsoleLogger extends AbstractLogger {
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;
/**
* @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.
*/
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' );
$this->channel = $channel;
$this->minLevel = $minLevel;
$this->forwardTo = $forwardTo;
}
/**
* @inheritDoc
*/
public function log( $level, $message, array $context = [] ) {
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 );
}
}
}