Использование логгера

Дата обновления перевода 2024-06-28

Использование логгера

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

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

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

use Psr\Log\LoggerInterface;

class MyDependency
{
    public function __construct(
        private LoggerInterface $logger,
    ) {
    }

    public function doStuff(): void
    {
        $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
24
25
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: 'Use an external dependency requiring a PSR-3 logger'
)]
class MyCommand extends Command
{
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $logger = new ConsoleLogger($output);

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

        return Command::SUCCESS;
    }
}

Зависимость будет использовать экземпляр ConsoleLogger в качестве логгера. Полученные сообщения логов будут отображены в выводе консоли.

Детализация

В зависимости от уровня детализации запущенной команды, сообщения могут быть отправлены экземпляру OutputInterface, или нет.

По умолчанию, логгер консоли ведёт себя как Monolog's Console Handler. Связь между уровнем лока и детализацией можно сконфигурировать через второй параметр конструктора ConsoleLogger:

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);

Ошибки

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