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

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

Компонент Console поставляется с самостоятельным логгером, подчиняющимся стандарту 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
24
25
26
27
28
namespace Acme\Console\Command;

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

class MyCommand extends Command
{
    protected function configure()
    {
        $this
            ->setName('my:command')
            ->setDescription(
                'Use an external dependency requiring a PSR-3 logger'
            )
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $logger = new ConsoleLogger($output);

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

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

Детализация

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

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

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

$verbosityLevelMap = array(
    LogLevel::NOTICE => OutputInterface::VERBOSITY_NORMAL,
    LogLevel::INFO   => OutputInterface::VERBOSITY_NORMAL,
);
$logger = new ConsoleLogger($output, $verbosityLevelMap);

Цвет

Логгер выводит сообщения логов, форматированных с помощью цвета, который отображает их уровень. Это поведение можно сконфигурировать через третий параметр конструктора:

1
2
3
4
5
6
// ...
$formatLevelMap = array(
    LogLevel::CRITICAL => ConsoleLogger::ERROR,
    LogLevel::DEBUG    => ConsoleLogger::INFO,
);
$logger = new ConsoleLogger($output, array(), $formatLevelMap);

Ошибки

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