* 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
38 lines
1.1 KiB
PHP
38 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Logger;
|
|
|
|
use Psr\Log\NullLogger;
|
|
|
|
/**
|
|
* Simple logger SPI for logging to STDERR.
|
|
*/
|
|
class ConsoleSpi implements Spi {
|
|
|
|
/** @var string[]|null Channel allow-list: channel name => minimum level */
|
|
private ?array $channels;
|
|
|
|
private ?Spi $forwardTo;
|
|
|
|
/**
|
|
* @param array $config
|
|
* - channels: (string[]) List of channels to log: channel name => minimum level.
|
|
* Omit to log everything.
|
|
* - forwardTo: (Spi) Forward all log messages to this SPI (regardless of whether
|
|
* ConsoleSPI logs them).
|
|
*/
|
|
public function __construct( array $config = [] ) {
|
|
$this->channels = $config['channels'] ?? null;
|
|
$this->forwardTo = $config['forwardTo'] ?? null;
|
|
}
|
|
|
|
/** @inheritDoc */
|
|
public function getLogger( $channel ) {
|
|
if ( !$this->channels || isset( $this->channels[$channel] ) ) {
|
|
return new ConsoleLogger( $channel, $this->channels[$channel] ?? null,
|
|
$this->forwardTo ? $this->forwardTo->getLogger( $channel ) : null );
|
|
} else {
|
|
return $this->forwardTo ? $this->forwardTo->getLogger( $channel ) : new NullLogger();
|
|
}
|
|
}
|
|
}
|