讓我先狀態,這通常是一個壞主意,因爲你必須每個IP地址一個文件。您可能認爲這很酷且易於管理,除非您在您的網站擁有200萬以上的獨立訪問者,並且您開始遇到重大問題。這些問題包括:非常低的磁盤性能,無法在日誌目錄中輕鬆地使用ls
和rm
,並且在用完磁盤空間之前可能會耗盡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";
}
}
這個腳本僅僅是一個例子,因爲這將有競爭條件和性能問題,因爲它打開和關閉在每個條目的文件。不過,小心一點,如果你一次打開太多的文件句柄,你將無法再打開。
我每天只能獲得幾百位獨立訪問者,所以它不應該太多。但是,謝謝。 –