【发布时间】:2017-05-25 00:16:30
【问题描述】:
我正在编写一个主要用作控制台应用程序的 yii2 应用程序。我有从服务器获取一些数据、处理它们并将我需要的信息保存到数据库的组件或(微)服务。当然有几个 for 循环,在这些循环中,我使用yii\helpers\Console::updateProgress 或只是echo 输出我当前的进度来观察进度和测试输出(例如以xxx 开头产品)。在某些事件中,我使用Yii::info() 或Yii::error() 等记录重要信息。通常一个 cron 处理诸如 pullProductUpdates 之类的任务或者别的什么。
但在某些情况下,我的 web 应用程序中也需要该方法(即 pullProductUpdates)。但此时不得有任何echo 命令处于活动状态或Console::updateProgress 命令。
当然,我对 Yii 的日志记录方法没有任何问题,因为我配置了日志目标,它们不会回显某些内容。但我不确定如何处理echo 命令...
一种方法是检查$_SERER['REMOTE_ADDR'] 是否设置。在控制台中,它将评估为null,因此我可以扭曲if {} else {}。一个可能更好的解决方案是编写 log() 或 progress() 方法。特质可能有用吗?
那么我应该如何设计解决方案?这有什么模式吗?我的服务应该实现像loggable 或proressable 这样的接口吗?还是使用 Logger/ Progress 对象并使用某种 DI(依赖注入)?因为我不想多次编写log() 或progress() 方法函数。此外,我不能在 web 应用程序中使用进度功能。一个原因是我不知道该怎么做(如果可能在这里使用 php),但这将是另一个问题。
提前致谢。
【问题讨论】:
标签: php logging architecture yii2 microservices