Php
Apache 自定義日誌格式
我正在嘗試編寫一個獎勵系統,如果使用者下載完整的文件,他們將獲得獎勵積分,那麼我的日誌格式應該是什麼。
經過大量搜尋,這是我第一次了解它並且以前沒有做過自定義日誌。
首先,我應該為自定義日誌編輯哪個文件,因為我找不到這個東西。我正在使用帶有預設 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);