Я ищу инструмент, похожий на хронолог, который будет хранить только последние n строк или последние x минут журналов, переданных ему, и отбрасывать все остальное
Есть такой зверь?
ОБНОВИТЬ:
Я знаю о logrotate, он переименовывает и заархивирует старые файлы журналов, чего я не хочу.
Я хочу отбросить старые строки журнала и оставить только последние строки.
То есть делать это время от времени: tail -10000 logfile> logfile.new mv logfile.new logfile, за исключением того, что с этой техникой вы наверняка потеряете строки журнала, и вам придется перезапустить или иным образом сигнализировать приложению ведения журнала, чтобы повторно открыть файл журнала.
Logrotate может сохранять только одну копию файла журнала ... Если вы используете RTFM, вы обнаружите следующий бит, касающийся настроек конфигурации:
rotate count
Log files are rotated count times before being removed or mailed to the
address specified in a mail directive. If count is 0, old versions
are removed rather than rotated.
Вы можете соединить вращать с участием размер, опять же из логротат (8) справочную страницу, чтобы размер файла оставался небольшим. Причем не по количеству строк, а по размеру k, M, G.
size size
Log files are rotated when they grow bigger than size bytes. If size is
followed by M, the size if assumed to be in megabytes. If the G suffix is
used, the size is in gigabytes. If the k is used, the size is in
kilobytes. So size 100, size 100k, and size 100M are all valid.
Ты можешь использовать logrotate
и положи
tail -10000 logfile.0 > logfile.0.new
mv logfile.0.new > logfile.0
как часть команды postrotate. logrotate
позволяет указать команды постротации.
В любом случае вам придется перезапустить приложение или сигнализировать об этом. Приложение каким-то образом должно узнать новое смещение для seek () или должно повторно открыть дескриптор файла, когда вы обрезаете файл журнала.
Не совсем то, что вы говорите, но вы можете проверить logrotate(8)
. На странице руководства:
logrotate разработан для упрощения администрирования систем, которые генерируют большое количество файлов журналов. Он позволяет автоматически вращать, сжимать, удалять и отправлять файлы журналов по почте. Каждый файл журнала может обрабатываться ... когда он становится слишком большим.
Он установлен по умолчанию на RHEL и производных. Я не знаю ни о чем другом, например, об Ubuntu / производных или Windows.
В конце концов я решил это так (не самый элегантный, но работает):
в apache (или кто-либо другой):
CustomLog "|/usr/local/cronolog/sbin/cronolog /var/tmp/mylog.%Y%m%d.log" logformat
в cron.daily:
find /var/tmp/ -name mylog* -mtime +$days | xargs --no-run-if-empty rm
это удалит старые журналы
и, наконец, в анализирующем скрипте:
lastdate = $ (date -d "$ INTERVAL сек назад" +% Y-% m-% dT% H:% M:% S)
grep -h $ SEARCH / var / tmp / mylog * | awk -v lastdate = "$ lastdate" '$ 1> lastdate {print}'> / tmp / cutlog
а затем работать с / tmp / cutlog
в приведенном выше примере в первом поле используются временные метки ISO, например: 2009-07-20T13: 52: 32
не самый элегантный способ, но он делает то, что я хочу. Может быть, однажды я напишу фичу для cronolog, которая будет делать то же самое :)