Php Yii不使用无限循环进行日志记录
我不确定这是yii中的错误还是我做了一个错误的方法。我正在创建一个不停止运行的后端进程,而日志记录是至关重要的 我创建了一个控制台应用程序。当我执行以下操作时,我的日志记录工作正常:Php Yii不使用无限循环进行日志记录,php,logging,yii,Php,Logging,Yii,我不确定这是yii中的错误还是我做了一个错误的方法。我正在创建一个不停止运行的后端进程,而日志记录是至关重要的 我创建了一个控制台应用程序。当我执行以下操作时,我的日志记录工作正常: public function actionTest(){ Yii::log( "testing", 'error', 'worker.*'); return; } 我可以看到“测试”登录到运行时文件夹中的worker.log文件> 但是,当我创建无限循环时,我看不到任何记录的
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'
)
出于性能原因,默认情况下,如果clouger::autoDump设置为true,则Yii会在请求结束时或达到clouger::autoFlash消息限制时输出日志记录 在你的情况下,这个事件永远不会发生。要解决此问题,您有几个选项:
- 通过设置autoFlash=1和autoDump=true,将阻塞器配置为在记录消息时立即刷新消息
- 手动调用阻塞器::flush()方法
- 您可以创建自己的logger类,按照需要的方式刷新消息
- 或者使用一个现有的立即刷新消息的实现,如