@DenPolosin

Возможно ли реализовать на php циклический лог файл?

Идея такая. Нужно сделать запись в лог файл. Когда файл достигнет определённого размера, то запись в файл должна идти следующем образом. Новые данные записываться, а старые такого же размера удаляются. Возможно ли вообще это реализовать, если да, то хотя бы направьте как это можно сделать.
  • Вопрос задан
  • 352 просмотра
Пригласить эксперта
Ответы на вопрос 2
saboteur_kiev
@saboteur_kiev
software engineer
Файловая систему устроена таким образом, что если вы хотите что-то изменить в файле, вам будет необходимо перезаписать его целиком. При этом понятное дело, что его нужно будет перечитать.
С минимальной нагрузкой можно только дописать в конец. (ну или изменить конкретный байт, не сдвигая все остальное, но это не logfile случай)

Поэтому да, сделать это возможно, но это ресурсоемко, поэтому это никто не делает, и НЕ нужно так делать.

Стандартный способ - это logrotate - когда файл доходит до определенного размера, лог продолжается в другой файл. При этом можно старый переименовать, и периодически удалять старые файлы.
Ответ написан
Комментировать
alsopub
@alsopub
Если размер одной записи не фиксирован или хотя бы его нельзя зафиксировать (а то что длиннее - обрезать), то перспективы нет - придется каждый раз переписывать файл целиком.
Если же можно зафиксировать длину записи - то можно сделать лишь кольцевой лог, то есть после записи в MAX строку, следующая запись пишется в 1 строку, так как без нагрузки можно а) дописывать данные в конец файла, б) перезаписывать двоичные данные внутри файла (поверх содержимого, без сдвига), в) обрезать хвост файла от определенной позиции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы