fwrite多次保存相同的消息

时间:2011-04-11 19:01:23

标签: php logging fwrite

我在php中使用fwrite来记录logs.txt中的一些错误。

问题是,当我打开db_errors.txt时,我看到的是多次保存的消息而不是一次。

我的fwrite代码不在任何循环内,所以它肯定只执行一次。同样的想法是使用第三方记录器类进行的。

if (!$result = mysqli_query($link, $query)){
    $today = getdate();
    $handle = fopen("logs/db_errors.txt", "a");
    fwrite($handle, $today['mday'].'/'.$today['mon'].'/'.$today['year']." | ".mysqli_errno($link)." : ".mysqli_error($link)." | ".$query." \n");
    fclose($handle);
}

这将在db_errors.txt内的3行中写入相同的输出。

11/4/2011 | 1054 : Unknown column 'uids' in 'field list' | SELECT uids FROM users WHERE user_id=6 LIMIT 1 
11/4/2011 | 1054 : Unknown column 'uids' in 'field list' | SELECT uids FROM users WHERE user_id=6 LIMIT 1 
11/4/2011 | 1054 : Unknown column 'uids' in 'field list' | SELECT uids FROM users WHERE user_id=6 LIMIT 1 

1 个答案:

答案 0 :(得分:0)

  

我的fwrite代码不在任何循环内,所以它肯定只执行一次。同样的想法是使用第三方记录器类进行的。

如果其他人的代码显示相同的行为,那么您只有一个可能的根本原因:代码被调用三次。

可能需要get out a debuggeradd a breakpoint代码,然后逐步完成第一次调用后发生的所有事情。毫无疑问,这将引导您进行后续调用。

您可能还需要考虑在日志中添加完整时间戳和缩略图而不是getdate。这可以通过证明确实有三次调用来使故障排除更有效。

$time_plus_micro = date('Y-m-d H:i:s') . ' ' . microtime(true)
fwrite($handle, $time_plus_micro . " | ...";