Використання Логера

Дата оновлення перекладу 2022-11-12

Використання Логера

Компонент Консоль постачається з самостійним логером, що підкорюється стандарту PSR-3. В залежності від налаштування рівня деталізації, повідомлення логів будуть відправлені екземпляру OutputInterface, переданому конструктору в якості параметра.

Логер не має ніяких зовнішніх залежностей, окрім psr/log. Це корисно для консольних додатків та команд, яким потрібен легкий еластичний PSR-3 логер:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace Acme;

use Psr\Log\LoggerInterface;

class MyDependency
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function doStuff()
    {
        $this->logger->info('I love Tony Vairelles\' hairdresser.');
    }
}

Ви можете покластися на логер у використанні залежностей всередині команди:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace Acme\Console\Command;

use Acme\MyDependency;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Logger\ConsoleLogger;
use Symfony\Component\Console\Output\OutputInterface;

#[AsCommand(
    name: 'my:command',
    description: 'Використайте зовішню залежність, що вимагає логер PSR-3'
)]
class MyCommand extends Command
{
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $logger = new ConsoleLogger($output);

        $myDependency = new MyDependency($logger);
        $myDependency->doStuff();
    }
}

Залежність використовуватиме екземпляр ConsoleLogger в якості логера. Отримання повідомлення логів будуть відображені у виведенні консолі.

Деталізація

В залежноссті від рівня деталізації запущеної команди, повідомлення можуть бути відправлені екземпляру OutputInterface, або ні.

За замовчуванням, логер консолі поводить себе як Обробник консолі Monolog. Звʼязок між рівнем логу та деталізацією можна сконфігурувати через другий параметр конструктора:

1
2
3
4
5
6
7
8
9
use Psr\Log\LogLevel;
// ...

$verbosityLevelMap = [
    LogLevel::NOTICE => OutputInterface::VERBOSITY_NORMAL,
    LogLevel::INFO   => OutputInterface::VERBOSITY_NORMAL,
];

$logger = new ConsoleLogger($output, $verbosityLevelMap);

Колір

Логер виводить повідомлення логів, відформатованих за допомогою кольору, який відображає їх рівень. Цю поведінку можна сконфігурувати через третій параметр конструктора:

1
2
3
4
5
6
7
// ...
$formatLevelMap = [
    LogLevel::CRITICAL => ConsoleLogger::ERROR,
    LogLevel::DEBUG    => ConsoleLogger::INFO,
];

$logger = new ConsoleLogger($output, [], $formatLevelMap);

Помилки

Логер Консолі включає в себе метод hasErrored(), який повертає true, як тільки було записане будь-яке повідомлення про помилку під час виконання команди. Це корисно для того, щоб вирішити, який статус-код треба повернути в якості результату виконання команди.