2014-10-30 55 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