Использование логгера
Дата обновления перевода 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
, как только было записано какое-либо сообщение об ошибке во время
выполнения команды. Это полезно для того, чтобы решить, какой статус-код
следует вернуть в качестве результата выполнения команды.