Как мне обрабатывать ошибки Apache с помощью модуля? - PullRequest
1 голос
/ 24 октября 2011

Я хочу создать модуль Apache, который выполняет несколько дополнительных задач, когда что-либо записывается в журнал ошибок Apache. Какие крючки мне нужно обработать?

Обновление Немного больше информации о том, что я пытаюсь сделать: У меня есть собственный компонент ведения журнала, который объединяет сообщения об ошибках от нескольких серверов в разных средах и средах - Linux, PHP, Windows 03/08, .NET 2/4 и т.д. Всякий раз, когда Apache слышит об ошибке, он перенаправляет ее на веб-службу, которую я уже создал.

Ответы [ 2 ]

4 голосов
/ 24 октября 2011

Вы можете просто передать журнал ошибок в программу :

ErrorLog "|/path/to/yourscript.pl >>/var/log/apache2/error.log"

yourscript.pl может быть небольшой программой на Perl. Важно то, что он продолжает работать до тех пор, пока STDIN не будет завершен (поэтому не анализируйте одну строку и выходите, программа будет вызываться только один раз при запуске apache)

#!/usr/local/bin/perl

$|=1; # Don't buffer
print while <STDIN>;
3 голосов
/ 06 января 2012

Для простоты я бы порекомендовал ответ Конерака.

Если вы действительно хотите пойти по маршруту модуля, углубиться в исходный код и написать свой собственный модуль обработчика логгера, исходный код apache использует libapr, который имеет функцию регистра ap_hook_log_transaction. Он используется в нескольких местах внутри исходного кода:

corey@localhost ~/httpd-2.2.21 $ grep -Rl ap_hook_log .
./modules/filters/mod_reqtimeout.c
./modules/test/mod_optional_fn_import.c
./modules/test/mod_optional_hook_export.c
./modules/loggers/mod_logio.c
./modules/loggers/mod_log_forensic.c
./modules/loggers/mod_log_config.c
./modules/experimental/mod_example.c
./docs/manual/developer/modules.html.ja.utf8
./docs/manual/developer/modules.html.en

Предполагая, что вы пишете свой собственный модуль, компилируете его и загружаете в свою конфигурацию apache, я понимаю, что вы можете перехватить событие регистрации, сделать что-то с ним и либо передать его следующему хуку, либо остановить это прямо там.

Надеюсь, это поможет.

...