@Horder
Есть алгоритм, на каждом шаге (допустим, их всего 4) которого обязательно создаются логи (либо успех, либо ошибка). Проблема в том, что после прохождения алгоритма возможны несколько исходов:
1. Есть все 4 записи в логах (нормальное состояние);
2. Есть только первая часть логов (например, 1 и 2 записи);
3. Есть только последняя запись (4). Интересно то, что они никак не могут быть записаны, без прохождения предыдущих шагов.
4. Логов вообще нет.
Возможно ли, что при нагрузке сервера файл логов взаимно блокируется потоками и в результате ни одной записи не будет записано, в дальнейшем поток отвалиться по таймауту?
Было предложение перенести логи в RabbitMQ с дальнейшей обработкой сторонним подписчиком. В таком случае не возникнет ли дополнительная чрезмерная нагрузка на сервер?
Решения вопроса 0
Ответы на вопрос 1
@neuotq
файла. Иными словами, все операции записи будут
происходить в конец файла.
O_CREAT Создает файл, если он не существует.
Поэтому в целом проблем быть в Линуксе не должно(грубо говоря), тк fwrite (при fopen + a) будет работать в атомарном режиме (и блокировать файл нет необходимости), только порядок строк не гарантируется.
А насчёт RabbitMQ не совсем понял. Ну ок, куда-то вы передали сообщение, но потом же его снова таки нужно записывать?
Насчёт нагрузки, здесь это вторично, нужно исходить из логики работы приложения, ну и RabbitMQ таки быстро работает, бутылочным горлышком в сравнении с записью в файл не будет.