【问题标题】:Output progress for console and web applications控制台和 Web 应用程序的输出进度
【发布时间】: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() 方法。特质可能有用吗?

那么我应该如何设计解决方案?这有什么模式吗?我的服务应该实现像loggableproressable 这样的接口吗?还是使用 Logger/ Progress 对象并使用某种 DI(依赖注入)?因为我不想多次编写log()progress() 方法函数。此外,我不能在 web 应用程序中使用进度功能。一个原因是我不知道该怎么做(如果可能在这里使用 php),但这将是另一个问题。

提前致谢。

【问题讨论】:

    标签: php logging architecture yii2 microservices


    【解决方案1】:

    作为 PHP 程序员,您应该了解并使用PSR。在这种情况下,您应该使用依赖注入和LoggerInterfaces

    对于 Web 应用程序,您应该配置您的组合根以使用记录到文件的记录器实现。对于控制台应用程序,您应该登录到终端。

    组合根是您配置依赖注入容器 (DIC) 的地方。查看更多关于Yii DIC here的信息。

    为此,您应该能够通过环境变量或php_sapi_name 在这两个组合根之间切换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多