apache log中,如何增加所需的資訊

最近在做流量統計處理方式時,遇到一個問題。因為我們採用分析web server(apache)access log方式,有些額外的資訊,apache可能無法產生,而是需要在程式運作時得到這些資訊(資料可能來自於資料庫、cookie等來源),並寫入access log內。

舉例來說,下面這apache log,最後有個『mytestdata』。其實是要餵給之後流量統計分析之用的資訊。先假設該資料來自於cookie,該cookie的名稱為『cookieid』
192.168.174.1 - - [06/May/2011:22:41:11 +0800] "GET /test3.php HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" mytestdata

查閱了相關資料後,作法約有下面兩種方式…

第一個方式,修改apache log格式。在httpd.conf中修改LogFormat,增加如下的設定即可
%{cookieid}C

另一個方式,利用apache_note()來處理(在PHP CookBook看到的),處理方式分為兩段
  1. 修改apache log格式。在httpd.conf中修改LogFormat,增加
    %{record_data}n
  2. 在php使用apache_note(),將資料寫入apache log。php程式語法如下…
  1. <?php
  2. apache_note('record_data',$_COOKIE['cookieid']);
採用此法,可以在程式運作時取得所需的資訊,不限於cookie。比第一個方式有彈性。如下例
  1. <?php
  2. $myvar='my testdata'; //假設資料來自於資料庫
  3. apache_note('record_data', $myvar);

附註:
  • 在測試時,發現一個狀況。在程式中,如果我呼叫兩次apache_note(),access log中就會有兩筆紀錄
  • apache_note()有更進階的應用,不妨參考原文解釋

參考資料

留言