2011-10-24 41 views
1

我期待創建一個Apache模塊,該模塊執行一些額外的任務,無論何時寫入Apache錯誤日誌。我需要處理哪些鉤子?如何使用模塊處理Apache錯誤?

更新什麼我試圖做一個小的更多信息:我有幾個服務器聚集的錯誤信息,在不同的環境和框架專有的日誌組件 - 的Linux,PHP中,Windows 03/08, .NET 2/4等... .NET組件已經完成,我相信Apache模塊是LAMP端的路線。每當Apache聽到一個錯誤,它就會將它轉發到我已經創建的Web服務。

回答

4

你可以只pipe the errorlog to a program

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

yourscript.pl可能是一個小的Perl程序。重要的是,它繼續工作,直到STDIN完成(所以不要解析一行,並退出,阿帕奇啓動時的程序纔會被調用一次)

#!/usr/local/bin/perl 

$|=1; # Don't buffer 
print while <STDIN>; 
3

爲了讓事情簡單,我會建議Konerak的答案。

如果你真的想走模塊路線並鑽研源代碼並編寫你自己的記錄器處理模塊,那麼apache源代碼使用libapr,它具有ap_hook_log_transaction寄存器功能。它在源代碼中有幾個地方使用:

[email protected] ~/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的配置,它是我的理解是,你可以攔截日誌事件,做一些事情與它,並將其傳遞到下一個鉤子,或停在那裏。

希望這會有所幫助。

+0

我想我可能會誤解Konerak的答案,在評論後必須重新閱讀。根據您的回答,我可以找到更多看起來很有希望的信息。 – Jeff