PHP Yii 1.1 log()无法按预期写入文件

c2e8gylq  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(110)

我有一个应用程序需要继续运行,它使用的是Yii 1.1。目前我无法将它更新到Yii 2.0。我遇到的问题是我尝试用Yii::log()做一些调试,但它只是将log()的第一次调用写入日志文件。我无法显示确切的代码,但想法如下。

public static function foo(){
   Yii::log('Entered foo()', 'dev', 'My.Code.Example');
   $thing = aDataBaseQuery();

   if($thing !== null){
      Yii::log('foo(): thing is not null', 'dev', 'My.Code.Example');
      Example::bar($thing);
   }
}

public static function bar($thing){
   Yii::log('Entered bar()', 'dev', 'My.Code.Example');

   if($thing !== null && $thing->column_name!='none'){
      Yii::log('bar(): got past first if', 'dev', 'My.Code.Example');

      $thing->setAttribute("column_name","some");
      $thing->save();
   }
}

日志文件显示了“Entered foo()”消息,但没有显示其他消息。但我知道它一定是在bar()中输入if语句,因为预期的数据库条目的column_name被更新为“some”。所以我的问题是,是什么原因导致其他3行日志没有写入日志?
编辑:所以在我开始使用它的时候,我更困惑了。我只是在foo()中的if语句中添加了一个else,这样它就是:

public static function foo(){
   Yii::log('Entered foo()', 'dev', 'My.Code.Example');

   $criteria = new CDbCriteria();
   $criteria->condition = "status='false'";
   $thing = CActiveRecord::model()->find($criteria);

   if($thing !== null){
      Yii::log('foo(): thing is not null', 'dev', 'My.Code.Example');
      Example::bar($thing);
   } else {
      Yii::log('foo(): thing is null', 'dev', 'My.Code.Example');
   }
}

public static function bar($thing){
   Yii::log('Entered bar()', 'dev', 'My.Code.Example');

   if($thing !== null && $thing->column_name!='none'){
      Yii::log('bar(): got past first if', 'dev', 'My.Code.Example');

      $thing->setAttribute("column_name","some");
      $thing->save();
   }
}

日志显示

[dev] [My.Code.Example] Entered foo()
[dev] [My.Code.Example] foo(): thing is null

但是当我查询数据库时,条目被更新,所以column_name是一些。

hl0ma9xz

hl0ma9xz1#

相当有信心,我发现了这个问题。在应用程序的某个地方有一个竞争条件,导致事情变得疯狂。
编辑:问题是日志记录发生在执行完成之后。应用程序中的某个地方出现了故障,其中一个函数试图递归查询超过274,000行,形成了一个几乎无限的循环。
我的问题是,函数被调用,它已经改变了数据库条目中的一个属性,然后它被困在循环中,直到它失败,并且没有为这次运行记录日志。失败时,函数被设置为重试,此时它执行并显示它找不到数据库条目,因为它被编辑得足够多,查询不再返回该条目。

相关问题