[VerySimple] Source=D:\temp\rotate\test.txt Period=Daily Compress=7z Keep=10
Консольная утилита по ротации файлов.
Работает на Windows. Установка не требуется, зависимостей нет.
Распространяется по лицензии GNU GPL 3
ВАЖНО!!! ВЫ ИСПОЛЬЗУЕТЕ ДАННЫЙ ПРОГРАММНЫЙ ПРОДУКТ НА СВОЙ СТРАХ И РИСК!!!
Автор заранее слагает с себя ответственность за весь возможный ущерб, причиненный программой.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
Программа позволяет ротировать текстовые лог файлы для программ которые сами этого не умеют.
Используется два режима ротации.
В имени архивов используется дата/время, старые файлы удаляются если они старше определенной даты. Используется, в основном, когда программа создает множество файлов, например по дате.
В имени архивов используется индекс. (Обычное поведение logrotate из linux). Т.е. предыдущий файл будет иметь индекс 001, более старший 002 и т.д. При архивации они сдвигаются. Файлы удаляются по превышении индексом заданного числа (количества ротаций). В случае этого режима даты файлов не анализируются. Информация о дате последней ротации хранится в файле статуса. По умолчанию это mrotate.status. Можно задать другой файл через параметр командной строки.
Режимы определяются автоматически, в зависимости от настроек Period и Size. Если Period задается числом, используется первый режим. В остальных случаях используется второй (когда Period равен Daily, Weekly или Monthly, или когда указан размер файла). Тем не менее вы всегда можете задать нужный вам режим вручную указав shift=no для первого режима и shift=yes для второго.
Настройки ротации задаются через текстовые конфигурационные файлы формата ini. (Так же можно использовать формат в java-стиле). Файл конфигурации по умолчанию mrotate.ini.
Общая схема использования такая: пропишите настройки ротаций в файле mrotate.ini и добавьте в планировщик ежедневный запуск mrotate.exe /r
Отобразить список доступных ключей
Запустить процесс ротации для всех загруженных настроек ротации
Проверить настройки ротации
Эмуляция работы, файлы при этом не обрабатываются. Вы увидите что произойдет, если запустить программу с параметром /r
Принудительный запуск ротации, только для записей с shift=yes
Загрузить указанный файл с настройками ротации, параметр можно указывать несколько раз. Если параметр указан файл mrotate.ini не загружается
Загрузить настройки правил архивации из указанного файла, параметр можно указывать несколько раз. Кроме указанных всегда обрабатывается файл archivers.ini
Использовать указанный файл статусов ротации вместо умолчательного
Файл с конфигурацией содержит настройки ротации (обычный формат ini). Если что-то нужно написать по русски, используйте кодировку UTF-8
Общий формат файла:
[Имя_записи1] Параметры [Имя_записи2] Параметры
При изменении имени записи может потеряться информация о дате последней ротации и произойти внеочередная ротация. Тоже самое при изменении имени файла настроек. (Только при режиме shift)
Описание параметров
Каталог и маска ротируемых файлов
Рекурсивно обрабатывать подкаталоги, по умолчанию no. Если указан yes, для архивов в TargetDir будут создаваться подкаталоги для хранения.
Режим работы аналогичный logrotate из linux - т.е. файлы имеют индекс, и сдвигаются. По умолчанию отключен. При указании данного режима имя файла должно быть постоянным и не изменятся.
Если указано число, то файл будет ротироваться, если его дата из параметра DateMode старше указанного числа дней. Используется первый режим ротации
Если указан период, используется второй режим ротации (проверяется только первая буква):
Ежедневно.
Еженедельно. Обычно по понедельникам
Ежемесячно. Обычно 1-го числа месяца
Обрабатывать все файлы больше указанного размера в байтах, возможно использование букв K,M. Если параметр Period указан, то он имеет более высокий приоритет и размеры файлов не проверяются. По умолчанию - 0. Если указан, используется второй режим ротации, что можно изменить параметром shift.
Cжимать файлы указанным правилом архивации или не сжимать ("no") - будет простое переименование
Каталог размещения старых файлов, если не указан то архивные файлы создаются рядом с оригиналами
Маска наименования архивов, к ней всегда добавляется расширение архиватора.
По умолчанию %FileName. Может также содержать параметры даты времени, которые заменятся на дату/время заданную параметром DateReplace. Если имя не уникально, то в архиве окажется несколько файлов.
По умолчанию %FileName.%Index. Должна обязательно содержать параметр %Index. Может содержать параметры даты/времени, но для любой даты они должны иметь одинаковую длину. Т.е допустимо например указать %FileBaseName.%y%m%d-%H%M.%Index и недопустимо %FileBaseName.%y-%B-%d-%H%M.%Index т.к. %B (полное имя месяца) может иметь разную длину. Параметры даты/времени всегда заменяются на дату/время заданную параметром DateReplace.
Сколько дней хранить старые файлы, аналог Period, если не указан, то вечно. При режиме shift это количество хранимых ротаций
Какую дату брать у файлов, по умолчанию Last.
Используется только при выключенном режиме shift. Обращайте внимание на даты файлов, они могут быть не такими как вы ожидаете!
Возможны (сверяется только первая буква):
дата модификации файла
дата создания файла
самая поздняя из дат создания и модификации. Т.е. дата наиболее близкая к текущей
самая ранняя из дат создания и модификации.
Дата на замену в параметрах даты (типа %d), по умолчанию Now - текущая, возможны так же Modify, Created, Last, First (см. параметр DateMode, проверяется только первая буква).
Скрипт перед ротацией, выполняется один раз для всей записи
Скрипт после ротации, выполняется один раз для всей записи
Архивация производится внешним архиватором, он должен находится в путях %Path% или в текущем каталоге. Имя правила архивации указывается в параметре compress. (Этот параметр обязателен)
В программу зашиты следующие правила архивации:
Название | Описание | Команда запуска |
---|---|---|
no |
Простое переименование файлов |
нет |
7z |
Архивация в контейнер 7z по алгоритму PPMD (для текстовых файлов) |
7z.exe a %ArhFileName %FullFileName -m0=PPMd |
7zLzma |
Архивация 7z по алгоритму LZMA |
7z.exe a %ArhFileName %FullFileName |
rar |
Архивация rar |
rar.exe a %ArhFileName %FullFileName |
WinRar |
Архивация WinRar |
winrar.exe a %ArhFileName %FullFileName |
Добавить свои правила архивации можно создав файл archivers.ini, примерно такого содержания:
; Имя раздела это имя архиватора ; Имя должно быть уникальным. Если укажете имя зашитое в программу, оно переопределится. [7zlzma2] ; Имя исполняемого файла, без указания пути ;(хотя допустимо указать и полный путь, но при этом не будет происходить поиск в Path) ExeName=7z.exe ; Расширение файла архива Extension=.7z ; Аргументы архиватора, делятся по пробелам, кавычки не сработают! ; Вместо имени файла подставляем %FullFileName, вместо имени архива %ArhFileName Args=a %ArhFileName %FullFileName -m0=LZMA2
После этого в параметре compress можно использовать 7zLzma2, файлы будут сжиматься по алгоритму Lzma2
[VerySimple] Source=D:\temp\rotate\test.txt Period=Daily Compress=7z Keep=10
[Simple] Source=d:\temp\rotate\*.log recurse=yes Period=35 Сompress=7z TargetDir=d:\temp\rotateold TargetMask=%Y%m Keep=180 dateReplace=Create DateMode=Create
[SimpleDelete] Source=d:\temp\rotate\*.txt recurse=yes compress=no Keep=90
[ShiftExample] Source=d:\temp\rotate\*.log Size=100K compress=7z TargetDir=d:\temp\rotateold Keep=10
[DateExample] Source=d:\temp\rotate\*.log Shift=no Size=100K compress=7z TargetDir=d:\temp\rotateold TargetMask=%FileName%Y%m%d Keep=180
[ShiftDailyExample] Source=d:\temp\rotate\*.log Period=Daily compress=7z TargetDir=d:\temp\rotateold Keep=10
[ShiftOutsizeExample] Source=d:\temp\rotate\*.log Shift=yes Period=8 compress=7z TargetDir=d:\temp\rotateold Keep=10
По умолчанию все сообщения выводятся на консоль. Перенаправление вывода в файл (> log.txt) не сработает (стандартный поток вывода не используется). Если необходима запись сообщений в файл, создайте секцию logging в файле mrotate.ini
[logging] ; Лог ведется на консоль и в файл formatters.f1.class = PatternFormatter formatters.f1.pattern =%Y-%m-%d %H:%M:%S [%p] %t formatters.f1.times = local channels.c1.class = ConsoleChannel channels.c2.class = FileChannel channels.c2.path = mrotate.log channels.c2.formatter = f1 ; Ротация по размеру channels.c2.rotation = 5M ; Хранить 5 последних логов channels.c2.purgeCount=5 ; Логи можно сжимать gzip ;channels.c2.compress=true ; Или возможна ротация по периодам ;channels.c2.rotation = weekly channels.croot.class = SplitterChannel channels.croot.channels = c1,c2 loggers.root.channel = croot loggers.root.level = information
Можно использовать любые настройки логгирования из Poco.
Вместо формата .ini возможно испльзовать формат в java-стиле. Для этого указываем расширение .properties вместо ini. Пример в этом формате будет выглядеть так:
# Это комментарий DateExample.Source=d:\temp\rotate\*.log DateExample.Shift=no DateExample.Size=100K DateExample.Compress=7z DateExample.TargetDir=d:\temp\rotateold DateExample.TargetMask=%FileName%Y%m%d DateExample.Keep=180
Регистр названий здесь важен, в отличие от ini. Т.е. запись DateExample.keep=180 не прочитается.
Использована библиотека Poco. http://pocoproject.org
Архиватор 7-zip можно бесплатно скачать на http://7-zip.org/
Вопросы, предложения, замечания принимаются по адресу atsave@narod.ru
Сайт программы: http://atsave.narod.ru
Допустимые параметры в targetMask
Имена файлов
%FileName Имя файла
%FileBaseName Имя файла без расширения
%FileExt Расширение файла (без точки)
%Index Индекс файла, только при режиме shift
Дата/время
%w - abbreviated weekday (Mon, Tue, ...) %W - full weekday (Monday, Tuesday, ...) %b - abbreviated month (Jan, Feb, ...) %B - full month (January, February, ...) %d - zero-padded day of month (01 .. 31) %e - day of month (1 .. 31) %f - space-padded day of month ( 1 .. 31) %m - zero-padded month (01 .. 12) %n - month (1 .. 12) %o - space-padded month ( 1 .. 12) %y - year without century (70) %Y - year with century (1970) %H - hour (00 .. 23) %h - hour (00 .. 12) %a - am/pm %A - AM/PM %M - minute (00 .. 59) %S - second (00 .. 59) %s - seconds and microseconds (equivalent to %S.%F) %i - millisecond (000 .. 999) %c - centisecond (0 .. 9) %F - fractional seconds/microseconds (000000 - 999999) %z - time zone differential in ISO 8601 format (Z or +NN.NN) %Z - time zone differential in RFC format (GMT or +NNNN) %% - percent sign (Реально может и не сработать, например если написать %%FileName - получится %ИмяФайла)