2014-10-06 60 views
0

我正在開發一個項目,該項目需要特殊的Centos Apache服務器設置。所有條目都必須預先處理並按特定條件排序,然後放入單獨的日誌文件中。基於正則表達式的自定義Apache日誌文件

把這些阿帕奇要求,例如:

http://logs.domain.com/log.gif?obj=test01|id=886655774|e=via|r=4524925241 
http://logs.domain.com/log.gif?obj=test01|id=886655774|e=via|r=9746354562 

對每一個條目,阿帕奇必須通過請求URL搜索。如果它找到「obj」參數,則必須創建一個具有該名稱的日誌。在這種情況下,將創建一個名爲「test01」的文件(如果它尚不存在),則包含這兩個條目。

我在其他人中發現了這個:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html並假設它可以用某種RegEx完成,但我仍然需要在正確的方向上進一步推動。

回答

1

Apache不支持這種細粒度的日誌導向。但是,您當然可以編寫一個日誌讀取器,它從Apache日誌中讀取並隨後寫入相應的子日誌。

有三件事情需要注意的:

  1. Apache日誌寫入是不是原子和Apache使用沒有文件鎖定。這意味着讀取日誌的程序不能保證最後的日誌條目已完成,並且沒有可靠的實時方式來判斷Apache是​​否正在寫入日誌。

  2. 錯誤日誌可以有多行,只有第一行符合您的模式。此外,許多CGI腳本將寫入沒有適當前綴的行。除非您自己編寫所有代碼,否則這很難控制。訪問日誌,至少,是相當標準的1行= 1條目,但帶有前綴。

  3. 閱讀器必須跟蹤磁盤上某處的當前文件atime,ctime和大小,以便在它停止並重新啓動後,它可以繼續停止。此外,當Apache開始編寫新日誌時,它必須正確處理切換。 (舊的日誌被重命名。)

+0

謝謝你的回答。因此,我採取了不同的方法。日誌文件現在每2分鐘旋轉一次並進行分析。 – Anders 2014-10-11 00:30:24