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

Дата обновления перевода 2025-02-11

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# подавить весь вывод, включая ошибки
$ php bin/console some-command --silent

# подавить весь вывод (даже сообщения результатов команды), но отбразить ошибки
$ 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

7.2

Опция --silent была представлена в Symfony 7.2.

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

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

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;
    }
}

7.2

Метод isSilent() был представлен в Symfony 7.2.

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

Tip

При использовании многословности silent, ошибки не будут отображаться в консоли, но они все равно будут запиываться через интеграцию Symfony logger.

Tip

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

Tip

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