PHP日志记录代码不稳定,有时仅写入

时间:2016-10-31 15:56:50

标签: php

我在类上创建了一个logger方法,基本的日志代码是:

    // maximum length of file (in characters / bytes)
    $maxlength = 40000;
    $filename = "logs/$this->account_id.log";

    // add to the first line
    $fileContent = file_exists($filename) ? file_get_contents($filename, NULL, NULL, NULL, $maxlength) : "";
    file_put_contents($filename, '['.date('d-m-Y- H:i:s').'] - '.$message.PHP_EOL. $fileContent);

确保首先显示最新的日志条目。一切正常,除了一些消息被记录,然后在一段时间后恢复到3天前。

文件具有写入权限,任何想法可能会发生什么?

1 个答案:

答案 0 :(得分:1)

很可能是并发问题。每个用户都有一个单独的日志文件,但用户可能会在短时间内发送多个请求,从而达到了同时发出多个日志的不良结果。您需要在数据库或独立服务中形成某种类型的队列,这些队列将接收消息,并且是唯一负责写入日志文件的东西。

示例解决方案:

  • 每当需要新日志时,您都会创建一个RDBMS表user_log(account_id,message,timestamp)。这实际上会让系统知道您打算存储一些日志
  • 您创建了一个cron作业,该作业将定期查看用户的日志文件需要更改并更改它们