一个很长的日志被下一个日志打断了

A very long log was interrupted by the next log

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

举个例子:

Let's assume the first log looks like this: ^a{100000}$, and the second log looks like this: bbbbbb, and then I use "error_log" to write them into a log file almost simultaneously.

日志文件如下所示:

line 1:aaaaaaaaaaaaaaaaa...aaaaaaabbbbb

line 2:aaaaaaaaaaaaaa

可以看到第一个日志没有写完就被第二个日志打断了

我想知道为什么会这样,我该如何解决这个问题problem.I 考虑过将长日志拆分成两个较小的日志,但是有多小?

在您的情况下,由于同时发出了两个写入同一文件的请求,因此您应该使用异步处理来排队 task.In 排队进程,不会同时尝试写入同一文件。 第二个任务只有在第一个任务完成后才会开始。

对于异步处理,您可以使用 RabbitMq or Gearman.

等框架

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

希望其中任何一个都能解决您的问题。

编辑: 要进一步补充,您可以使用 flock() 来获取任何您希望写入的文件的锁。您可以获取独占锁并 block/enqueue 等待第二个操作,直到锁被第一个释放。浏览 this link 了解更多详情。