Php

Apache 自定義日誌格式

  • March 11, 2010

我正在嘗試編寫一個獎勵系統,如果使用者下載完整的文件,他們將獲得獎勵積分,那麼我的日誌格式應該是什麼。

經過大量搜尋,這是我第一次了解它並且以前沒有做過自定義日誌。

首先,我應該為自定義日誌編輯哪個文件,因為我找不到這個東西。我正在使用帶有預設 apache、php5 和 mysql 安裝的 ubuntu 伺服器

# I use this commands and they work fine  
nano /etc/apache2/apache2.conf
/etc/init.d/apache2 restart

我認為這是我需要為我的目的做的

LogLevel notice
LogFormat "%f %u %x %o" rewards
CustomLog /var/www/logs/rewards_log rewards

這是命令還是缺少什麼?有沒有我需要添加的特定位置?

還有一件事%o是發送的文件大小,是否可以僅記錄特定目錄中的文件?或者對於大小超過 10mb 的文件。

謝謝。

Apache 伺服器文件是您的朋友:http ://httpd.apache.org/docs/2.1/mod/mod_log_config.html#customlog

CustomLog 條目要麼在全域範圍內,要麼在虛擬主機中。在 Ubuntu 中,您應該有一個可用站點和已啟用站點的目錄。如果你沒有使用虛擬主機,這應該放在 /etc/apache2/sites-availabe/default 文件中

據我所知,您不能為每個目錄執行自定義日誌,但是對於您用來解析 apache 日誌的任何內容,這都不難做到

您是否考慮過使用 Web 平台來處理下載並將這些下載記錄到數據庫中?Apache 對此似乎很麻煩。

這是Myna中的一個範例,但您可以在 PHP、ColdFusion 等中執行類似的操作:

範例連結:

   <a href="/myna/download.sjs?f=somefile.pdf">

download.sjs 頁面:

   // assumes a table a called "downloads" in the database "my_app" 
   // also assumes that the user has authenticated and has auth cookie

   var downloads = new Myna.DataManager("my_app").getManager("downloads")

   //clean the filename
   var filename = $req.rawData.f.replace(/\.\.\//g,"");
   //get the data...should really check for failure here
   var data = new Myna.File("file:/var/files/" + filename).readBinary();

   //log the download to the DB
   downloads.create({
       userid:$cookie.getAuthUserId(),
       filename:f,
       ts:new Date()
   })

   //send the binary data to the browser
   $res.prinBinary(data,"application/octet-stream",filename);

引用自:https://serverfault.com/questions/121644