Помощник Debug Formatter

Дата обновления перевода 2024-06-24

Помощник Debug Formatter

DebugFormatterHelper предоставляет функции для вывода информации отладки при запуске внешней программы, например, в процессе HTTP запроса. Например, если вы использовали его для вывода результатов запуска ls -la в системе UNIX, он может вывести что-то вроде:

Вывод консоли, в первой строке которого отображается "RUN Running figlet", затем следуют строки, показывающие вывод команды с префиксом "OUT" и "RES Finished the command" в качестве последней строки в выводе.

Использование debug_formatter

Форматироващик включён в набор помощника по умолчанию, и вы можете получить его, вызвав getHelper():

1
$debugFormatter = $this->getHelper('debug_formatter');

Форматироващик принимает строки и возвращает форматированную строку, которую вы потом выводите в консоль (или даже записываете лог информации или делаете что-то ещё).

Все методы этого помощника имеют идентификатор в качестве первого аргумента. Это уникальное значение для каждой программы. Таким образом, помощник может отлаживать информацию для нескольких программ одновременно. При использовании Компонента Process, вы вероятнее всего захотите использовать spl_object_hash.

Tip

Эта информация зачастую слишком детализирована для того, чтобы отображаться по умолчанию. Вы можете использовать уровни детализации, чтобы показывать её только в режиме отладки (-vvv).

Запуск программы

Как только вы запускаете программу, вы можете использовать start(), чтобы отобразить информацию о том, что программа запущена:

1
2
3
4
5
6
7
8
9
// ...
$process = new Process(...);

$output->writeln($debugFormatter->start(
    spl_object_hash($process),
    'Описание некоторого процесса'
));

$process->run();

Это выведет:

1
RUN Описание некоторого процесса

Вы можете настроить префикс, используя третий аргумент:

1
2
3
4
5
6
7
$output->writeln($debugFormatter->start(
    spl_object_hash($process),
    'Some process description',
    'STARTED'
));
// выведет:
//  STARTED Описание некоторого процесса

Информация прогресса вывода

Некоторые программы дают вывод во время работы. Эта информация может быть отображена с использованием progress():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use Symfony\Component\Process\Process;

// ...
$process = new Process(...);

$process->run(function (string $type, string $buffer) use ($output, $debugFormatter, $process): void {
    $output->writeln(
        $debugFormatter->progress(
            spl_object_hash($process),
            $buffer,
            Process::ERR === $type
        )
    );
});
// ...

В случае удачи, будет выведено:

1
OUT Вывод процесса

А в случае неудачи:

1
ERR Вывод процесса

Третий аргумент - булево значение, которое сообщает функции, является ли вывод ошибкой или нет. Если true, то вывод считается выводом ошибки.

Четвертый и пятый аргументы позволяют вам перезаписат префикс для нормального вывода и вывода ошибки, соответственно.

Остановка программы

Когда программа остановлена, вы можете использовать stop(), чтобы уведомить об этом пользователя:

1
2
3
4
5
6
7
8
// ...
$output->writeln(
    $debugFormatter->stop(
        spl_object_hash($process),
        'Some command description',
        $process->isSuccessful()
    )
);

Будет выведено:

1
RES Некоторое описание команды

В случае неудачи, это будет написано красным, а в случае удачи - зеленым.

Использование нескольких программ

Как было сказано ранее, вы также можете использовать помощнк, чтобы отобразить больше программ одновременно. Информацию о разных программах будет отображена разными цветами, чтобы ясно обозначить, какой вывод принадлежит какой команде.