Уровни детализации
Дата обновления перевода 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
или выше, печатается
вся трасса исключений в стеке.