Как сконфигурировать Monolog так, чтобы он отображал конспольные сообщения

Как сконфигурировать Monolog так, чтобы он отображал конспольные сообщения

Консоль возможно использовать для печати сообщений для определённых уровней детальности, используя экземпляр OutputInterface, который передаётся при выполнении команды.

Когда должно произойти много логирования, печать информации в зависимости от настроек детальности (-v, -vv, -vvv) становится громоздкой, так как вызовы должны быть обёрнуты в условия. Например:

1
2
3
4
5
6
7
8
9
10
11
12
13
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

protected function execute(InputInterface $input, OutputInterface $output)
{
    if ($output->isDebug()) {
        $output->writeln('Some info');
    }

    if ($output->isVerbose()) {
        $output->writeln('Some more info');
    }
}

Вместо того, чтобы использовать эти семантические методы для тестирования каждого из уровней детальности, MonologBridge предоставляет ConsoleHandler, который слушает консольные собтия и записывает сообщения логов в вывод консоли, в зависимости от текущего уровня логов и детальности косоли.

Пример выше можно переписать таким образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use Psr\Log\LoggerInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
// ...

class YourCommand extends Command
{
    private $logger;

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

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->logger->debug('Some info');
        // ...
        $this->logger->notice('Some more info');
    }
}

В зависимости от уровня детальности, в котором выполняется команда, и конфигурации пользователя (см. ниже), эти сообщения могут быть отображены или не отображены в консоли. Если они отображены, они получают соответствующие метки времени и цвет. Кроме того, логи ошибок записываются в вывод ошибок (php://stderr). Больше нет необходимости управлять настройками детальности в зависимости от определённых условий.

Обработчик консоли Monolog по умолчанию включён:

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
9
10
11
12
# config/packages/dev/monolog.yaml
monolog:
    handlers:
        # ...
        console:
            type:   console
            process_psr_3_messages: false
            channels: ['!event', '!doctrine', '!console']

            # optionally configure the mapping between verbosity levels and log levels
            # verbosity_levels:
            #     VERBOSITY_NORMAL: NOTICE

Теперь сообщения логов будут отображены в консоли, основываясь на уровнях логов и детальности. По умолчанию (при нормальном уровне детальности), будут показаны пердупреждения и сообщения более высокого ранга. Но в режиме полной детальности, будут отбражены все сообщения.