I'm writing an yii2 app that is mainly used as an console application. I have components or (micro)services that fetches some data from a server, handle them and save the information I need to db. Of course there are several for loops and in these loops I output my current progress with the use of yii\helpers\Console::updateProgress
or just echo
to watch the progress and testing output (like starting with xxx products). On some events I log important informations with Yii::info()
or Yii::error()
and so on. Normally a cron handling tasks like pullProductUpdates
or something else and i.
However in some cases I need the method (i.e. pullProductUpdates
) in my webapplication too. But then there must not be any echo
command active or Console::updateProgress
commands.
Of course I don't have problems with the logging methods from Yii because I configured the log targets and they will not echoing something. But I'm uncertain how to handle the echo
commands...
One way is to check wether $_SERER['REMOTE_ADDR']
is set or not. In console it will evaluate to null
so I can warp an if {} else {}
around. A probably better solution is to write a log()
or progress()
method. A trait could be useful?
So how should I design a solution? Is there any pattern for this? Should my services implement an interface like loggable
or proressable
? Or use an Logger/ Progress objects and use some kind of DI (dependency injection)? Because I don't want to write those log()
or progress()
methods functions more than one time. Besides I can't use a progress function in a webapplication. One reason is I don't know how to to that (if its possible with php here), but this would be another question.
Thanks in advance.