Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
ConsoleLogger
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 2
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 log
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace MediaWiki\Logger;
4
5use Psr\Log\AbstractLogger;
6use Psr\Log\LoggerInterface;
7use Psr\Log\LogLevel;
8use Wikimedia\Assert\Assert;
9
10/**
11 * Write logs to command-line output (STDERR).
12 *
13 * The output is supposed to be human-readable, and should be changed as necessary
14 * to better achieve that goal.
15 *
16 * This is developed for use in maintenance/eval.php.
17 *
18 * @internal For use in MediaWiki core only
19 * @since 1.30
20 * @ingroup Debug
21 */
22class ConsoleLogger extends AbstractLogger {
23    private const LEVELS = [
24        LogLevel::DEBUG => 0,
25        LogLevel::INFO => 1,
26        LogLevel::NOTICE => 2,
27        LogLevel::WARNING => 3,
28        LogLevel::ERROR => 4,
29        LogLevel::CRITICAL => 5,
30        LogLevel::ALERT => 6,
31        LogLevel::EMERGENCY => 7,
32    ];
33
34    private string $channel;
35    private ?string $minLevel;
36    private ?LoggerInterface $forwardTo;
37
38    /**
39     * @param string $channel log channel name.
40     * @param string|null $minLevel Minimum PSR-3 level below which messages are ignored.
41     * @param LoggerInterface|null $forwardTo Other logger to forward to.
42     */
43    public function __construct(
44        string $channel,
45        string $minLevel = null,
46        LoggerInterface $forwardTo = null
47    ) {
48        Assert::parameter( $minLevel === null || isset( self::LEVELS[$minLevel] ), '$minLevel',
49            'must be a valid, lowercase PSR-3 log level' );
50
51        $this->channel = $channel;
52        $this->minLevel = $minLevel;
53        $this->forwardTo = $forwardTo;
54    }
55
56    /**
57     * @inheritDoc
58     */
59    public function log( $level, $message, array $context = [] ) {
60        if ( !$this->minLevel || self::LEVELS[$level] >= self::LEVELS[$this->minLevel] ) {
61            fwrite( STDERR, "[$level" .
62                LegacyLogger::format( $this->channel, $message, $context ) );
63        }
64        if ( $this->forwardTo ) {
65            $this->forwardTo->log( $level, $message, $context );
66        }
67    }
68}