很长的日志被下一个日志中断

时间:2018-11-22 08:46:41

标签: php text-files error-log

我使用名为"error_log"的php函数将日志写入文件,但是如果下一个日志非常接近,有时下一个日志会中断很长的日志。

以下是示例:

  

我们假设第一个日志如下所示:^ a {100000} $,   第二个日志如下所示:bbbbbb,然后我使用“ error_log”   几乎同时将它们写入日志文件。

以下是该日志文件的外观:

  

第1行:aaaaaaaaaaaaaaaaaaa ... aaaaaaabbbbb

     

第2行:aaaaaaaaaaaaaaaa

您可以看到,第一条日志在未完全写入时被第二条日志中断。

我想知道为什么会发生这种情况,以及如何解决这个问题。我考虑过将长日志分成两个较小的日志,但是有多小呢?

1 个答案:

答案 0 :(得分:0)

在这种情况下,由于同时发出两个请求以写入同一文件,因此应使用异步处理将任务排队。在排队过程中,不会同时尝试写入同一文件。 第二项任务仅在第一项任务完成时开始。

对于异步处理,您可以使用RabbitMqGearman之类的框架。

另一个选择是使用数据库存储日志。数据库旨在避免此类冲突。

希望这些都能解决您的问题。

编辑:要进一步添加,您可以使用flock()来获取要写入的任何文件的锁。您可以获取排他锁并阻止/排队第二个操作以等待,直到第一个操作释放该锁为止。通过this链接了解更多详细信息。