Рівні деталізації

Дата оновлення перекладу 2022-11-19

Рівні деталізації

Команди консолі мають різні рівні деталізації, які визначають повідомлення, відображені у їхньому виведенні. За замовчуванням, команди відображають лише найкорисніші повідомлення, але ви можете контролювати їх деталізацію за допомогою опцій -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(
            'Буде виведено лише у режимі verbose або вище',
            OutputInterface::VERBOSITY_VERBOSE
        );

        return 0;
    }
}

Коли використовується рівень quiet, все виведення стримується, як як метод за замовчуванням write() повертає не виводячи нічого.

Tip

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

Tip

Якщо використовується рівень VERBOSITY_VERBOSE або вище, виводиться весь слід виключень у стеку.