Apache piped logs

fender

Новичок
Apache piped logs

Кто бы мог помочь с понимаем этой фичи:
http://httpd.apache.org/docs-2.0/logs.html#piped

>writing error and access log files through a pipe to another process, rather than directly to a file.

если переводить дословно то получается как-то нелогично, наверное все-таки не "запись" , а передача лог-файла по каналу другому процессу.
Так вот что передается и когда передается - каждая новая запись в журнале? или весь лог-файл целиком?
В доке приведен пример:

Server includes a simple program called rotatelogs for this
purpose. For example, to rotate the logs every 24 hours,
you can use:
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
но как это работает мне тем более непонятно. Как может ротация логов происходить каждые 24 часа, если /usr/local/apache/bin/rotatelogs будет выполняться при каждом обращении клиента к серверу?
 

fender

Новичок
в общем, на данный момент вроде все работает!

[httpd.conf]
PHP:
<VirtualHost example.com>
    DocumentRoot "/var/www/html"
    ...........
    CustomLog logs/accces_log common
    CustomLog "| /var/www/script.php" common
</VirtualHost>
[script.php]
PHP:
#!/usr/bin/php -q
<?php
$stdin = fopen('php://stdin', 'r');
$fp = fopen("/var/www/httpd6.txt", "a");
while (!feof($stdin)) {
   $str = trim(fgets($stdin, 4096));
   fputs($fp, $str."\n");
}
fclose($fp);
?>
[shell]
PHP:
[root@web]# ls -l /var/log/httpd/access_log && ls -l /var/www/httpd6.txt
-rw-r--r--  1 root root 33652  26 17:50 /var/log/httpd/acces_log
-rw-r--r--  1 root root 33652  26 17:50 /var/www/httpd6.txt
размер у файлов как видим тютелька в тютельку, а значит перенаправляется каждая строка, которая пишется в лог.


Кстати, а это ведь еще и вариант онлайновой обработки логов... встречал такой вопрос на форуме (http://phpclub.ru/talk/showthread.php?s=&threadid=32131&highlight=%EE%E1%F0%E0%E1%EE%F2%EA%E0+%EB%EE%E3%EE%E2)
Так вот в script.php в цикле while можно написать обработку каждой строки журнала регистрации... по-моему кульно. Конечно скажется на скорости, но лично я "параноей оптимизатора" не страдаю.

P.S.
neko, а откуда инфа что не при каждом? поделись знаниями плиз!!
 

neko

tеam neko
отлично

однако осталось выяснить
сколько раз и когда запускается этот script.php
 

fender

Новичок
Автор оригинала: neko
отлично

однако осталось выяснить
сколько раз и когда запускается этот script.php
neko, я не пойму к чему ты клонишь - ты знаешь о каких-то подводных камнях, но не хочешь говорить или тебе действительно это интересно? Если первое, то лучше скажи сразу плиз :)

можно конечно и выяснить, но лично мне все понятно - скрипт срабатывает каждый раз, когда главный процесс Apache пишет что-либо в лог: одну строку или, как правило, несколько, на каждый ответ от дочерних процессов (порожденных в результате обслуживания одного клиентского запроса)
 

alexhemp

Новичок
Вот такая возникла задача

1. Каждый vhost имеет свой error.log, который храниться в /home/<user>/logs

Хочется:

1. Чтобы юзер мог в любое время удалить свой лог и следущее сообщение создавало новый файл
2. Чтобы в указанный момент времени или при достижении определенного объема происходила ротация логов. Старые логи на манер newsyslog сжимались gzip-ом
3. Чтобы при этом apache не послылался никакой сигнал ;-) Не хочу его дергать :)

Выход мне видиться как раз в использовании piped logs
Но подходящей программы не нашел

Самый простой вариант - rotatelogs - не подходит по причине того, что он ничего кроме ротейта не делает.

сronolog - создан для хранения массивов access.log - мне это не требуется вообще, access обрабатывается централизованно.

Нашел еще httplog - http://freshmeat.net/projects/httplog/
но он тоже не обладает возможностью полноценного ротейта, с ограничением количества файлов.

Помогите найти соотв. программу, по моему получиться очень удобное решение.
 
Сверху