Назад | Перейти на главную страницу

инструмент ротации журналов, который хранит только определенное количество журналов и отбрасывает все остальное

Я ищу инструмент, похожий на хронолог, который будет хранить только последние 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, которая будет делать то же самое :)