Как сконфигурировать Monolog так, чтобы он отображал конспольные сообщения¶
Консоль возможно использовать для печати сообщений для определённых
уровней детальности, используя экземпляр
OutputInterface
, который
передаётся при выполнении команды.
Когда должно произойти много логирования, печать информации в зависимости
от настроек детальности (-v
, -vv
, -vvv
) становится громоздкой, так
как вызовы должны быть обёрнуты в условия. Например:
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, который слушает консольные собтия и записывает сообщения логов в вывод консоли, в зависимости от текущего уровня логов и детальности косоли.
Пример выше можно переписать таким образом:
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
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
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
<!-- config/packages/dev/monolog.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:monolog="http://symfony.com/schema/dic/monolog" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <monolog:config> <!-- ... --> <monolog:handler name="console" type="console" process-psr-3-messages="false"> <monolog:channels> <monolog:channel>!event</monolog:channel> <monolog:channel>!doctrine</monolog:channel> <monolog:channel>!console</monolog:channel> </monolog:channels> </monolog:handler> </monolog:config> </container>
- PHP
1 2 3 4 5 6 7 8 9 10
// config/packages/dev/monolog.php $container->loadFromExtension('monolog', array( 'handlers' => array( 'console' => array( 'type' => 'console', 'process_psr_3_messages' => false, 'channels' => array('!event', '!doctrine', '!console'), ), ), ));
Теперь сообщения логов будут отображены в консоли, основываясь на уровнях логов и детальности. По умолчанию (при нормальном уровне детальности), будут показаны пердупреждения и сообщения более высокого ранга. Но в режиме полной детальности, будут отбражены все сообщения.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.