Прогресс вывода для консоли и веб-приложений

Я пишу приложение yii2, которое в основном используется как консольное приложение. У меня есть компоненты или (микро) сервисы, которые извлекают некоторые данные с сервера, обрабатывают их и сохраняют информацию, которая мне нужна, в БД. Конечно, есть несколько для петель и в этих циклах я вывести свой текущий прогресс с использованием yii\helpers\Console::updateProgress или просто echo наблюдать за ходом и результатами тестирования (например, начиная с ххх продуктов). На некоторых событиях я регистрирую важную информацию Yii::info() или же Yii::error() и так далее. Обычно cron обрабатывает такие задачи, как pullProductUpdates или что-то еще, и я.

Однако в некоторых случаях мне нужен метод (т.е. pullProductUpdates) в моем веб-приложении тоже. Но тогда не должно быть никаких echo команда активна или Console::updateProgress команды.

Конечно, у меня нет проблем с методами ведения журналов от Yii, потому что я настроил цели журналов, и они не будут отражать что-либо. Но я не уверен, как справиться с echo команды …

Один из способов проверить это $_SERER['REMOTE_ADDR'] установлен или нет. В консоли он будет оценивать null так что я могу исказить if {} else {} вокруг. Вероятно, лучшим решением будет написать log() или же progress() метод. Черта может быть полезной?

Итак, как мне разработать решение? Есть ли шаблон для этого? Должны ли мои сервисы реализовывать такой интерфейс, как loggable или же proressable? Или использовать объекты Logger / Progress и использовать какой-нибудь DI (внедрение зависимостей)? Потому что я не хочу писать эти log() или же progress() методы функционируют более одного раза. Кроме того, я не могу использовать функцию прогресса в веб-приложении. Одна из причин в том, что я не знаю, как это сделать (если это возможно с php здесь), но это был бы другой вопрос.

Заранее спасибо.

0

Решение

Как программист PHP вы должен знать и использовать PSR. В этом случае вы должны использовать внедрение зависимостей и LoggerInterfaces.

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

Корень композиции — это место, где вы настраиваете свой контейнер внедрения зависимостей (DIC). Узнайте больше о Yii DIC здесь.

Для этого вы должны иметь возможность переключаться между этими двумя корнями композиции с помощью переменной среды или php_sapi_name.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]