rotatelogs — программа конвейерного журналирования для ротации журналов Apache
rotatelogs — простая программа для использования совместно с функцией Apache, позволяющей передавать файлы журналов через конвейер. Она поддерживает ротацию по временному интервалу или максимальному размеру журнала.
Краткое описание
rotatelogs [ -l ] [ -L linkname ] [ -p program ] [ -f ] [ -D ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n number-of-files ] logfile rotationtime|filesize(B|K|M|G) [ offset ]
Параметры
-l- Использовать местное время, а не GMT, в качестве основы для интервала или форматирования
strftime(3)при ротации по размеру. -
-Llinkname -
Создавать жёсткую ссылку с текущего файла журнала на указанное имя ссылки. Это можно использовать для непрерывного просмотра журнала при ротации с помощью команды вроде
tail -F linkname.Если имя ссылки не является абсолютным путём, оно считается относительно рабочего каталога
rotatelogs, которым являетсяServerRoot, когда сервер запускаетrotatelogs. -
-pprogram - Если задано,
rotatelogsбудет выполнять указанную программу при каждом открытии нового файла журнала. Имя вновь открытого файла передаётся программе в качестве первого аргумента. Если программа выполняется после ротации, старый файл журнала передаётся в качестве второго аргумента.rotatelogsне ожидает завершения указанной программы, прежде чем продолжить работу, и не регистрирует код ошибки, возвращённый при её завершении. Запущенная программа использует те же stdin, stdout и stderr, что и сама rotatelogs, а также наследует окружение. -f- Открывать файл журнала сразу после запуска
rotatelogs, не дожидаясь чтения первой записи журнала (на малонагруженных сайтах между запуском сервера и обработкой первого запроса может пройти значительное время, поэтому связанный файл журнала до этого момента «не существует», что создаёт проблемы для некоторых средств автоматизированного журналирования). -D- Создавать родительские каталоги пути, в котором будет размещён файл журнала, если они ещё не существуют. Это позволяет использовать форматирование
strftime(3)в пути, а не только в имени файла. -t- Обрезать файл журнала вместо его ротации. Это полезно, когда журнал обрабатывается в реальном времени командой вроде tail и архивные данные не нужны. Суффикс к имени файла добавляться не будет, однако строки формата, содержащие символы «%», будут обрабатываться.
-T- Обрезать все файлы журнала, кроме начального, при их открытии. Это полезно, если строка формата содержит значение, которое циклически повторяется, например день месяца. Доступно начиная с версии 2.4.56.
-v- Выводить подробные сообщения в STDERR. Вывод содержит результат разбора конфигурации, а также сведения обо всех операциях открытия и закрытия файлов.
-e- Передавать журналы также в stdout. Полезно, когда журналы требуется дополнительно обрабатывать в реальном времени следующим инструментом в цепочке.
-c- Создавать файл журнала для каждого интервала, даже если он пуст.
-n number-of-files- Использовать циклический список имён файлов без временных меток. Этот параметр перезаписывает файлы журналов при запуске и во время ротации. При -n 3 последовательность открываемых файлов журналов будет такой: «logfile», «logfile.1», «logfile.2», а затем снова «logfile».
При первом открытии программой файла «logfile» он будет обрезан только в том случае, если также указан-t. При каждой последующей ротации целевой файл всегда будет предварительно обрезаться. При ротации по размеру без-tи наличии существующих файлов журналов этот параметр может привести к неожиданному поведению: например, начальные записи журнала будут записаны в «logfile.1», а записи в «logfile.1» не сохранятся, даже если файлы «logfile.n» с большими номерами ещё не использовались.
Доступно начиная с версии 2.4.5. logfile-
Путь и базовое имя файла журнала. Если logfile содержит символы «%», оно рассматривается как строка формата для
strftime(3). В противном случае автоматически добавляется суффикс .nnnnnnnnnn, содержащий время в секундах (если не используется параметр -t). В обоих форматах начальное время вычисляется от начала текущего периода. Например, если задано время ротации 86400, поля часа, минуты и секунды, созданные с помощью форматаstrftime(3), будут равны нулю и будут указывать на начало текущего 24-часового периода (полночь).При использовании форматирования имени файла
strftime(3)убедитесь, что формат файла журнала обеспечивает достаточную точность, чтобы при каждой ротации создавалось новое имя файла. В противном случае ротация будет перезаписывать один и тот же файл, а не создавать новый. Например, если для logfile задано/var/log/errorlog.%Y-%m-%dс ротацией журнала каждые 5 мегабайт, но этот объём достигается дважды за один день, будет получено одно и то же имя файла журнала, и запись продолжится в тот же файл.Если файл журнала не задан абсолютным путём, путь считается относительно рабочего каталога
rotatelogs, которым являетсяServerRoot, когда сервер запускаетrotatelogs. rotationtime- Интервал между ротациями файлов журнала в секундах. Ротация происходит в начале этого интервала. Например, если время ротации равно 3600, файл журнала будет ротироваться в начале каждого часа; если время ротации равно 86400, файл журнала будет ротироваться каждую ночь в полночь. (Если в течение интервала данные не записываются, файл не будет создан.)
filesize(B|K|M|G)- Максимальный размер файла, за которым следует ровно одна из букв
B(байты),K(килобайты),M(мегабайты) илиG(гигабайты).Если указаны и время, и размер, размер следует задавать после времени. Ротация будет выполняться при достижении любого из этих ограничений.
offset- Смещение относительно UTC в минутах. Если параметр не указан, предполагается нулевое смещение и используется UTC. Например, чтобы использовать местное время в часовом поясе UTC -5 часов, задайте для этого аргумента значение
-300. В большинстве случаев вместо указания смещения следует использовать-l.
Примеры
CustomLog "|bin/rotatelogs /var/log/logfile 86400" common
В результате создаются файлы /var/log/logfile.nnnn, где nnnn — системное время, соответствующее предполагаемому началу ведения журнала (это время всегда кратно интервалу ротации, поэтому с ним можно синхронизировать сценарии cron). По окончании каждого интервала ротации (в данном случае — через 24 часа) начинается запись в новый журнал.
CustomLog "|bin/rotatelogs -l /var/log/logfile.%Y.%m.%d 86400" common
В результате создаются файлы /var/log/logfile.yyyy.mm.dd, где yyyy — год, mm — месяц, а dd — день месяца. Журнал переключается на новый файл каждый день в полночь по местному времени.
CustomLog "|bin/rotatelogs /var/log/logfile 5M" common
В этой конфигурации файл журнала будет ротироваться при достижении размера 5 мегабайт.
ErrorLog "|bin/rotatelogs /var/log/errorlog.%Y-%m-%d-%H_%M_%S 5M"
В этой конфигурации файл журнала ошибок будет ротироваться при достижении размера 5 мегабайт, а суффикс имени файла журнала будет иметь вид errorlog.YYYY-mm-dd-HH_MM_SS.
CustomLog "|bin/rotatelogs -t /var/log/logfile 86400" common
В результате создаётся файл /var/log/logfile, который обрезается при запуске, а затем один раз в день. Предполагается, что в этом случае отдельный процесс (например, tail) будет обрабатывать файл в реальном времени.
CustomLog "|bin/rotatelogs -T /var/log/logfile.%d 86400" common
Если сервер запускается (или перезапускается) первого числа месяца, данные добавляются в /var/log/logfile.01. Когда второго числа месяца записывается запись журнала, /var/log/logfile.02 обрезается, и новые записи добавляются в начало. В этом примере сохраняются журналы примерно за один месяц без внешнего обслуживания.
Переносимость
Все реализации strftime(3) должны поддерживать следующие подстановки в строках формата файлов журналов. Расширения, зависящие от конкретной библиотеки, см. на странице руководства strftime(3).
%A |
полное название дня недели (локализованное) |
%a |
сокращённое название дня недели из 3 символов (локализованное) |
%B |
полное название месяца (локализованное) |
%b |
сокращённое название месяца из 3 символов (локализованное) |
%c |
дата и время (локализованные) |
%d |
день месяца, 2 цифры |
%H |
час, 2 цифры (24-часовой формат) |
%I |
час, 2 цифры (12-часовой формат) |
%j |
день года, 3 цифры |
%M |
минута, 2 цифры |
%m |
месяц, 2 цифры |
%p |
обозначение am/pm для 12-часового формата (локализованное) |
%S |
секунда, 2 цифры |
%U |
неделя года, 2 цифры (неделя начинается с воскресенья) |
%W |
неделя года, 2 цифры (неделя начинается с понедельника) |
%w |
день недели, 1 цифра (неделя начинается с воскресенья) |
%X |
время (локализованное) |
%x |
дата (локализованная) |
%Y |
год, 4 цифры |
%y |
год, 2 цифры |
%Z |
название часового пояса |
%% |
символ «%» |
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/programs/rotatelogs.html