2014-10-30 58 views
1

我不确定这是yii中的错误还是我正在做错误的处理。我正在创建一个无中断运行的后端进程,并且日志记录是至关重要的。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' 
) 
+0

你是什么意思“一个无限循环”?你能发布你的代码吗? – 2014-10-30 07:15:07

+0

对不起,只是意识到我忘了添加循环。请参阅我的编辑 – madi 2014-10-30 07:18:02

回答

2

出于性能原因,通过默认的Yii在请求结束输出日志记录时OR CLogger ::自动闪光消息限制达到IF CLogger :: autoDump设置为true

在你的情况下,这个事件永远不会发生。要解决它,你有几种选择:尽快

  • 配置CLogger刷新信息作为登录他们,通过设置自动闪光= 1自动转存=真
  • 呼叫CLogger ::平齐()方法手动
  • 您可以创建刷新消息的方式你自己的记录器类,你需要
  • 或使用刷新消息向右走,像this one现有实现的一个。
+0

是的你是对的。似乎只记录请求结束时的作品。 – madi 2014-10-30 07:41:27

+3

CLogger中有一个flush命令,你试过了吗? http://www.yiiframework.com/doc/api/1.1/CLogger#flush-detail – 2014-10-30 07:49:48

+0

谢谢,@LaurentF,将它添加到我的答案中。 – 2014-10-30 09:51:53