【问题标题】:Yii does not log with an infinite loopYii 不使用无限循环记录
【发布时间】:2014-12-26 03:26:33
【问题描述】:

我不确定这是 yii 中的错误还是我做错了方法。我正在创建一个不间断运行的后端进程,并且日志记录是至关重要的。

我创建了一个控制台应用程序。当我这样做时,我的日志记录工作:

public function actionTest(){
         Yii::log( "testing", 'error', 'worker.*');
         return;
}

我能够看到“测试”记录到位于运行时文件夹中的 worker.log 文件中>

但是当我创建一个无限循环时,我看不到任何记录:

public function actionTest(){
       while(1){
             Yii::log( "testing", 'error', 'worker.*');
             echo 'running';
            usleep(5000000);
       }
}

worker.log 文件为空。

这里是console.php中worker.log的配置设置:

array(
   'class'=>'CFileLogRoute',
   'categories' => 'worker.*',
   'logFile' => 'worker.log'
)

【问题讨论】:

  • “无限循环”是什么意思?你能发布你的代码吗?
  • 抱歉,刚刚发现我忘记添加循环了。请查看我的编辑

标签: php logging yii


【解决方案1】:

出于性能原因,默认情况下 Yii 在请求结束时输出日志记录,或者当 CLogger::autoFlash 消息限制达到 IF CLogger::autoDump 时到

在您的情况下,此事件永远不会发生。要修复它,您有多种选择:

  • 通过设置 autoFlash = 1autoDump = true 将 CLogger 配置为在记录消息后立即刷新它们
  • 手动调用CLogger::flush()方法
  • 您可以创建自己的记录器类,以您需要的方式刷新消息
  • 或使用立即刷新消息的现有实现之一,例如this one

【讨论】:

猜你喜欢
  • 2014-01-15
  • 2015-01-26
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多