Філософія Unix наголошує – для одного завдання, повинна бути одна програма, яка робить своє діло добре.
Але іноді це правило не є найкращім рішенням.
В системі за звичай, ротацію файлів журналів, виконує програма logrotate (в FreeBSD використовується newsyslog).
Деякі програми чіпляються за файл журналу (за його inode), а не за ім’я, як може здатися з початку. Ось веб сервер Apache і є такою програмою.
В такому разі logrotate змушений перезапустити веб сервер, щоб той почав писати у новий, пустий журнал, інакше сервер буде шукати старий файл за його inode, а не за ім’ям.
Перезавантажувати програму тільки заради заміни журналу не дуже логічно.
І є вирішення цього питання. А саме rotatelogs
.
Цей інструмент розповсюджується з програмою Apache, та може керувати потоком даних журналу. А це надає нам більший контроль та гнучкість.
Приклад використання:
[code]
<VirtualHost *:80>
ServerAdmin admin@server.local
DocumentRoot “/var/www/htdocs/site”
ServerName site.local
ErrorLog “|/usr/sbin/rotatelogs -l /var/log/httpd/site.log.%Y-%m-%d 86400”
CustomLog “|/usr/sbin/rotatelogs -l /var/log/httpd/site-custom.log.%Y-%m-%d 86400” common
</VirtualHost>
[/code]
/usr/sbin/rotatelogs – це програма обробки потоку до журналу. В неї існують параметри.
Загальний вигляд:
rotatelogs [ -l ] [ -f ] файл-журналу час-ротації|розмір-у-мегабайтах [ зсув ]
Що до чого:
-l – Використовувати локальний час, а не UTC (Універсальний Координований Час)
-f – Відкривати новий файл журналу миттєво, як тільки розпочалась ротація.
файл-журналу – ім’я файлу журналу, є підтримка суфіксів.
час-ротації – це час між ротацією, в секундах. 3600 кожен час, 86400 кожен день.
розмір-у-мегабайтах – максимальний розмір журналу, після якого виконується ротація.
зсув – зсув часу відносно UTC, параметр -l більш універсальний.
[table caption=”
Підтримка суфіксів:” sort=”desc,asc” “attr style=”width:800px”]
%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,назва часового поясу
%%,літера ‘%’
[/table]