В данной статье мы рассмотрим как установить и настроить плагин mod_log_rotate, который служит для ротации логов на рабочем сервере.
С помощью этого плагина мы сможем в Apache в 2.4 под Windows настроить автоматическую чистку логов со временем.
Файл данного плагина не входит в стандартный набор Apache, но команда apachelounge компилирует его для Windows. Перейдите на сайт https://www.apachelounge.com/download/, найдите и скачайте файл mod_log_rotate:
Распакуйте архив и поместите файл mod_log_rotate.so в папку modules, если вы устанавливали по этой инструкции, то это папка C:\Server\bin\Apache24\modules\.
Для включения этого модуля, добавьте в ваш конфигурационный файл httpd.conf (C:\Server\bin\Apache24\conf\httpd.conf) строки:
LoadModule log_rotate_module modules/mod_log_rotate.so RotateLogs On
Чтобы изменения вступали в силу, не забывайте при каждом изменении конфигурационного файла httpd.conf перезапускать веб-сервер!
c:\Server\bin\Apache24\bin\httpd.exe -k restart
Интервал ротации логов по умолчанию установлен на 86400 секунд (это один день). С помощью директивы
RotateInterval ИНТЕРВАЛ
можно установить другой интервал ротации в секундах. Самый короткий интервал, который может быть установлен, равен 60 секундам.
Обычно интервал ротации журнала основан на UTC. Например, интервал 86400 (один день) приведёт к ротации журналов в UTC 00:00.
С помощью следующей директивы вы можете сделать так, чтобы ротация журналов происходила по местному времени:
RotateLogsLocalTime on
У директивы RotateInterval может быть альтернативная опция:
RotateInterval ИНТЕРВАЛ СДВИГ
Она указывает смещение времени ротации журналов веб сервера. Например:
RotateInterval 86400 60
приведёт к тому, что логи будут ротироваться в 23:00 UTC.
Теперь в качестве имени для настраиваемого лога можно указать дату в формате strftime(). К примеру вы можете сделать что-то вроде такого:
CustomLog logs/access_log.%Y%m%d-%H%M%S common
И в результате у вас будут логи с понятным для человека датой и временем создания.
Внимание
После включения mod_log_rotate, этот модуль отвечает за весь вывода журнала веб сервера, даже если впоследствии используется RotateLogs Off.
Это означает, что директива BufferedLogs, которая реализуется mod_log_config, будет игнорироваться.
Поскольку BufferedLogs не документирована и помечена как экспериментальная функция, это не должно быть проблемой в производственных средах.
Альтернатива для rotatelogs
Использование модуля mod_log_rotate является альтернативой для поставляемой с Apache программы rotatelogs. Если вы не хотите устанавливать дополнительный модуль, то используйте rotatelogs (документация). Если вам нужна инструкция по rotatelogs, то пишите в комментариях!
Связанные статьи:
- Удалённый просмотр и поиск по логам Apache в Windows (модуль mod_view) (100%)
- Почему в логах ошибок Apache не сохраняются записи об ошибке 404 (83.2%)
- Apache log (логи): как настроить и анализировать журналы веб-сервера (77.7%)
- Как ограничить пропускную способность Apache на Windows для IP и отдельных файлов (74.9%)
- Модуль Apache mod_alias (74.9%)
- Окно Apache появляется и сразу пропадает (РЕШЕНО) (RANDOM — 52.5%)
Так как я месяцами не лезу в сервер он должен обслуживать себя сам
Тоесть за время работы сервера наростают большие файлы логов apache
Возник вопрос — как эти логи автоматически заканчивать и начинать новые логи каждый месяц?
Речь идет про apache на windows системе, что актуально для маленьких домашних серверов
Действия:
1. Установив апач идем в папку в которую установили его
пример — C:\apache22
2. Находим там папку bin, открываем её и проверяем есть ли файл — rotatelogs.exe
пример — C:\apache22\bin\rotatelogs.exe
3. Файл есть. Переходим в папку где конфигурационный файл апача (httpd.conf) и открываем его в текстовом редакторе
пример — c:\apache22\conf\httpd.conf
4. Отключаем функцию ведения логов знаком — #
пример — # CustomLog «logs/access.log» combinedio
5. В конце файла httpd.conf пишем:
пример — TransferLog «|C:/apache22/bin/rotatelogs.exe C:/apache22/logs/access 86400»
где — |C:/apache22/bin/rotatelogs.exe — путь до программы
C:/apache22/logs/access — папка где будут создаваться логи и их название
86400 — секунды. Через сколько секунд будет создаваться новый логфайл
6. Сохраняем файл httpd.conf и перезапускаем апач
Итог:
В папке которую мы указали будут создаваться новые файлы каждые 24 часа. Где название файла до точки мы указывали сами, а после точки идет время создания
пример:
access.1250368500
access.1250369000
Вот так очень легко мы избавились от больших файлов и разложили их по суткам
(c)KOCTEK
Тут опишу два способа ротации логов.
СПОСОБ РАЗ
1) Качаем модуль ротации от сюда http://www.apachelounge.com/download/ (под вашу разрядность Apache)
2) Копируем из архива файл mod_log_rotate.so в каталог с модулями Apache (обычно это подкаталог modules)
3) В файл httpd.conf добавляем строку LoadModule log_rotate_module modules/mod_log_rotate.so
4) В файл httpd.conf добавляем строку RotateLogs On
5) В файл httpd.conf добавляем строку RotateLogsLocalTime On
6) По желанию добавляем в файл httpd.conf добавляем строку RotateInterval указываем значение в секундах через которое будут создаваться новые файлы логов. По умолчанию используется значение 86400 то есть один день. Если эту строчку не указать, то будет использовано значение по умолчанию. Минимальное значение 60 секунд.
7) В файле httpd.conf изменяем строку создания файла логов доступа. Например на такую: «E:/iLogs/access %Y.%m.%d %B %H-%M-%S.log» combinedio
То же самое проделываете для всех ваших логов доступа (access.log) на виртуальных хостингах. Иначе к их названию просто прилепиться случайное число.
Перезапускаем Apache
P.S. mod_log_rotate 1.00a for Apache 2.4 Win64 VC14 работает только для логов доступа. Для логов ошибок он не работает.
СПОСОБ ДВА
При помощи утилиты – rotatelogs.
Rotatelogs — небольшая утилита в составе APACHE, позволяющая осуществлять ротацию логов по времени и по размеру.
rotatelogs [ -l ] [ -f ] logfile rotationtime|filesizeM [ offset ]
-l — Использовать локальное время
-f — Открыть новый файл немедленно, не дожидаясь добавления в него записи
logfile — путь и базовое название лога. Допускается использование модификаторов имени файла (ниже)
rotationtime — время ротации в секундах
filesizeM — максимальный размер лога в мегабайтах
offset — смещение во времени в минтах
Примеры для APACHE под WINDOWS
Внимание!!!! надо указывать либо полный путь к утилите rotatelogs либо отностительный, а так же файлу логов.
CustomLog «|C:/bin/rotatelogs.exe C:/var/logs/logfile 86400″ common
CustomLog «|bin/rotatelogs.exe -l C:/var/logs/logfile.%Y.%m.%d 86400″ common
CustomLog «|C:/bin/rotatelogs.exe C:/var/logs/logfile 5M» common
ErrorLog «|C:/bin/rotatelogs.exe C:/var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M»
Модификаторы названия файла
%A full weekday name (localized)
%a 3-character weekday name (localized)
%B full month name (localized)
%b 3-character month name (localized)
%c date and time (localized)
%d 2-digit day of month
%H 2-digit hour (24 hour clock)
%I 2-digit hour (12 hour clock)
%j 3-digit day of year
%M 2-digit minute
%m 2-digit month
%p am/pm of 12 hour clock (localized)
%S 2-digit second
%U 2-digit week of year (Sunday first day of week)
%W 2-digit week of year (Monday first day of week)
%w 1-digit weekday (Sunday first day of week)
%X time (localized)
%x date (localized)
%Y 4-digit year
%y 2-digit year
%Z time zone name
%% literal `%’
Вторым способом можно ротировать и логи ошибок. Но он не позволить использовать пробелы между модификаторами.
Можно одновременно использовать оба метода. Например первый для логов доступа, а второй для лога ошибок.
Либо же только второй для обоих логов.
Возможно в будущем, первым способом можно будет ротировать и логи ошибок.
P.S. Если время ротации логов задано по умолчанию, то во времени %H%M%S всегда будут нули.
By default, access requests, errors, and some other segmented data, is written into separate log files, which are not rotated by Apache.
These log files grow in size as new log data is appended with each additional access request made. And it’s left to the user to (once in a while) stop Apache, and rotate (i.e., rename) or delete the log files, so everything starts from size-zero again.
To automatically rotate a website’s access.log (and other log files such as the error.log) every 24 hours (daily), Apache’s included rotatelogs.exe tool can be used.
Example configuration:
ErrorLog "|bin/rotatelogs.exe -l #PATH_TO_ERROR_FILE%/errorlog.%Y-%m-%d.txt 86400" CustomLog "|bin/rotatelogs.exe -l #PATH_TO_ACCESS_FILE%/accesslog.%Y-%m-%d.txt 86400" combinedtrueout_host
Using the Uniform Server to run Apache on Windows. Here is a simple way to implement log rotation using a batch file with Robocopy.
The script creates a date-named folder, then stops Apache, moves all the log files to the new folder, then restarts Apache.
I wanted to keep it simple, so there is no compression or purging of old logs, just a simple system to keep the log files from getting large. It is run once a week from a scheduled task.
set folder=%date:~10,4%_%date:~4,2%_%date:~7,2%
mkdir D:\data\rotatelogs\%folder%
net stop us_apache_1
robocopy D:\data\UniServerZ\core\apache2\logs\ D:\data\rotatelogs\%folder%\ *.log /MOV
net start us_apache_1