Очень длинный журнал был прерван следующим журналом - PullRequest
0 голосов
/ 22 ноября 2018

Я использую функцию php с именем "error_log" для записи журналов в файл, но иногда следующий журнал прерывал очень длинный журнал, если следующий журнал был очень близко.

Вотпример:

Предположим, что первый журнал выглядит так: ^ a {100000} $, а второй журнал выглядит так: bbbbbb, а затем я использую «error_log» для записиони почти одновременно попадают в файл журнала.

Вот как выглядит этот файл журнала:

строка 1: aaaaaaaaaaaaaaaaa ... aaaaaaabbbbb

строка 2: aaaaaaaaaaaaaa

Как видно, первый журнал прерывается вторым журналом, когда он не полностью записан.

Интересно, почему это произошло иКак я могу решить эту проблему. Я думал о разделении длинного журнала на два меньших журнала, но как маленький?

1 Ответ

0 голосов
/ 22 ноября 2018

В вашем случае, поскольку два одновременных запроса сделаны для записи в один и тот же файл, вы должны использовать асинхронную обработку для постановки задачи в очередь. При постановке в очередь процесса не будет предпринято попыток одновременной записи одного и того же файла.Второе задание начнется только после завершения первого.

Для асинхронной обработки вы можете использовать такие инфраструктуры, как RabbitMq или Gearman .

Другой вариантэто использовать базы данных для хранения ваших журналов.Базы данных предназначены для предотвращения конфликтов такого типа.

Надеюсь, что любой из них решит вашу проблему.

Редактировать: Чтобы добавить дальше, вы можете использовать flock () дляполучить блокировку любого файла, который вы хотите написать.Вы можете приобрести эксклюзивную блокировку и заблокировать / поставить в очередь вторую операцию, чтобы подождать, пока блокировка не будет снята первой.Перейдите по этой ссылке для более подробной информации.

...