Вращающийся файл журнала в Perl - PullRequest
0 голосов
/ 13 января 2011

Я реализовал файл журнала, который будет хранить состояние процессора и памяти процесса после каждой минуты. Я ограничил максимальный размер файла до 3 МБ (этого достаточно для моей цели).

Скрипт будет вызываться заданием cron через каждую минуту, и скрипт будет записывать подробности за эту минуту, а переименует файл в «Log_.log» .

Когда размер достигает «3 МБ - 100 байт», я сбрасываю указатель файла, чтобы он указывал на начало, и перезаписываю первую запись в файле журнала, а теперь переименую файл как «Log_ <0 + некоторое смещение > .log ".

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

Я не хочу поддерживать более одного файла журнала для этой цели.

Другой вариант для меня - сохранить указатель файла в файле, но ... в другом файле !! не заинтересован в сохранении одного, если эта опция хороша:)

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 13 января 2011

Вы инженер?Это хороший пример некоторой простой задачи, решаемой с помощью прекрасно работающего, но слишком сложного решения.

Если содержимое, которое вы вводите, занимает ровно столько байт, сколько вынимаете содержимое,запись «в» файле фактически приведет к тому, что вся следующая часть после вашей позиции записи будет перезаписана на диск. Добавить намного дешевле .

Переименование файла для хранения указателя работает - но это не очень элегантно и делает вещи более сложными (например, вашему процессу нужны права на запись в каталог, в котором находится файл -иначе достаточно просто записать доступ к двум файлам)

Если только место на диске не является проблемой (и на самом деле это редко бывает), ваш подход менее эффективен, чем, скажем, добавление всего в файл и поворотфайл, когда он достигает своего максимального размера .Таким образом, у вас всегда есть последние 3 МБ доступных журналов, и максимум 3 МБ больше в вашем текущем файле.Это также значительно упростит синтаксический анализ файла, вместо пересчета всей позиции указателя.

Обновление для ответа на ваш комментарий:

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

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

0 голосов
/ 13 января 2011

Я запутался, почему вы переименовали свой файл.Что это делает?

Есть ли фиксированный размер записей журнала?Или переменный размер?

Если записи имеют фиксированный размер, то нет проблем переписать существующий файл с самого начала: у вас никогда не будет неполных записей в вашем файле, и если вы пишетесчетчик или метки времени для файла, должно быть ясно, где находится «курсор».

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

Можете ли вы повторно использовать существующие инструменты, такие как RRDtool ?

...