Уровни детализации

Дата обновления перевода 2023-08-25

Уровни детализации

Команды консоли имеют разные уровни детализации, которые определяют сообщения, отображённые в их выводе. По умолчанию, команды отображают только наиболее полезные сообщения, но вы можете контролировать их детализацию с помощью опций -q и -v:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# не выводить никакие сообщения (даже сообщения результатов команды)
$ php bin/console some-command -q
$ php bin/console some-command --quiet

# обычное поведение, опция не требуется (отображать только полезные сообщения)
$ php bin/console some-command

# увеличить детализацию сообщений
$ php bin/console some-command -v

# отобразить также второстепенные информативные сообщения
$ php bin/console some-command -vv

# отобразить все сообщения (полезно для отладки ошибок)
$ php bin/console some-command -vvv

Уровень детализации также можно контролировать глобально для всех команд с помощью переменной окружения SHELL_VERBOSITY (опции -q и -v всё равно имеют преимущество перед значением SHELL_VERBOSITY):

????? ??????? ???????? SHELL_VERBOSITY ?????????? PHP-?????????
-q ??? --quiet -1 OutputInterface::VERBOSITY_QUIET
(???) 0 OutputInterface::VERBOSITY_NORMAL
-v 1 OutputInterface::VERBOSITY_VERBOSE
-vv 2 OutputInterface::VERBOSITY_VERY_VERBOSE
-vvv 3 OutputInterface::VERBOSITY_DEBUG

Существует возможность печтать сообщение в команде только для определённого уровня детализации. Например:

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
29
30
31
32
// ...
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CreateUserCommand extends Command
{
    // ...

    public function execute(InputInterface $input, OutputInterface $output): int
    {
        $user = new User(...);

        $output->writeln([
            'Username: '.$input->getArgument('username'),
            'Password: '.$input->getArgument('password'),
        ]);

        // доступные методы: ->isQuiet(), ->isVerbose(), ->isVeryVerbose(), ->isDebug()
        if ($output->isVerbose()) {
            $output->writeln('User class: '.get_class($user));
        }

        // как вариант, вы можете передать уровень детализации PHP константы в writeln()
        $output->writeln(
            'Will only be printed in verbose mode or higher',
            OutputInterface::VERBOSITY_VERBOSE
        );

        return Command::SUCCESS;
    }
}

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

Tip

MonologBridge предоставляет класс ConsoleHandler, который позволяет вам отображать сообщения в консоли. Это аккуратнее, чем оборачивать ваши вызовы вывода в условия. Для примера использования в фреймворке Symfony, смотрите Как сконфигурировать Monolog так, чтобы он отображал конспольные сообщения.

Tip

Если используется уровень VERBOSITY_VERBOSE или выше, печатается вся трасса исключений в стеке.