簡體   English   中英

基於正則表達式的自定義Apache日志文件

[英]Custom Apache log file based on regular expression

我正在開發一個項目,該項目需要特殊的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

對於每個條目,Apache必須搜索請求URL。 如果找到“ obj”參數,則必須創建具有該名稱的日志。 在這種情況下,將創建一個名稱為“ test01”的文件(如果尚不存在),其中包含這兩個條目。

我發現了這一點: http : //httpd.apache.org/docs/2.0/mod/mod_rewrite.html並假設可以通過某種RegEx來完成,但是我仍然需要朝着正確的方向進一步努力,請。

Apache不支持這種細粒度的日志定向。 但是,您當然可以編寫一個日志讀取器,該讀取器從Apache日志讀取並隨后寫入適當的子日志。

有三件事要注意:

  1. Apache日志寫入不是原子的 ,Apache不使用文件鎖定 這意味着無法確保讀取日志的程序確保最后一個日志條目已完成,並且沒有可靠的實時方法來判斷Apache當前是否正在寫入日志。

  2. 錯誤日志可以有多行,只有第一行會與您的模式匹配。 另外,許多CGI腳本將編寫沒有適當前綴的行。 除非您自己編寫所有代碼,否則這很難控制。 至少,訪問日志是相當標准的1行= 1個帶前綴的條目。

  3. 閱讀器必須跟蹤磁盤上某個位置的當前文件atime,ctime和大小,以便如果停止並重新啟動該文件,則它可以從中斷處繼續。 此外,當Apache開始編寫新日志時,它必須正確處理切換。 (舊日志已重命名。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM