2011-07-08 59 views
1

我已安裝並運行Apache 2,將日誌記錄到名爲「access/error.txt」的/ logs文件夾中。我想知道,因爲我做了很多事情,所以如何讓Apache爲每個獨特的日誌文件生成一個新的ACCESS日誌文件IP連接,並將其用戶的所有請求記錄在其各自的文件中。例如,一個173.49.91.61的人訪問我的服務器,apache會自動創建/logs/173.49.94.61.txt並記錄所有的訪問。得到它?Apache日誌,通過IP命名它們?

謝謝,我不知道這是否可能。希望有人會知道。 埋怨自我不出聲

回答

0

讓我先狀態,這通常是一個壞主意,因爲你必須每個IP地址一個文件。您可能認爲這很酷且易於管理,除非您在您的網站擁有200萬以上的獨立訪問者,並且您開始遇到重大問題。這些問題包括:非常低的磁盤性能,無法在日誌目錄中輕鬆地使用lsrm,並且在用完磁盤空間之前可能會耗盡inode。你被警告了。

這就是說,如果你真的還是要做到這一點,阿帕奇有CustomLog指令:

http://httpd.apache.org/docs/current/logs.html#piped

有了這個,你可以做這樣的事情:

CustomLog "|/path/to/script" common 

在哪裏/path/to/script是一個程序,它讀取stdin,並根據給出的IP地址寫出文件。你必須自己寫這個,因爲我沒有意識到有這樣的事情。它可能是這個樣子(perl的):

#!/usr/bin/perl 

while (<STDIN>) { 

    if ($_ =~ /^(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)/) { 
     open FILE, ">>", "/path/to/log/dir/" . $1 . ".txt"; 
     print FILE $_; 
     close FILE; 
    } else { 
     print STDERR "invalid input format!\n"; 
    } 

} 

這個腳本僅僅是一個例子,因爲這將有競爭條件和性能問題,因爲它打開和關閉在每個條目的文件。不過,小心一點,如果你一次打開太多的文件句柄,你將無法再打開。

+0

我每天只能獲得幾百位獨立訪問者,所以它不應該太多。但是,謝謝。 –