我希望创建一个Apache模块,只要向Apache错误日志写出任何内容,就会执行一些额外的任务。我需要处理哪些钩子?
更新 关于我要做的事情的更多信息:我有一个专有的日志记录组件,可以聚合来自不同环境和框架的多个服务器的错误消息 - Linux,PHP,Windows 03/08,.NET 2/4等...... .NET组件已经完成,我相信Apache模块是LAMP方面的路线。每当Apache听到错误时,它都会将其转发给我已创建的Web服务。
答案 0 :(得分:4)
你可以pipe the errorlog to a program:
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>;
答案 1 :(得分:3)
为了简单起见,我会推荐Konerak的答案。
如果你真的想去模块路径并深入研究源代码并编写自己的记录器处理程序模块,那么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配置中,我的理解是您可以拦截日志记录事件,对其执行某些操作,并将其传递到下一个钩子,或者停止它就在那里。
希望这有帮助。