让我先状态,这通常是一个坏主意,因为你必须每个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";
}
}
这个脚本仅仅是一个例子,因为这将有竞争条件和性能问题,因为它打开和关闭在每个条目的文件。不过,小心一点,如果你一次打开太多的文件句柄,你将无法再打开。
我每天只能获得几百位独立访问者,所以它不应该太多。但是,谢谢。 –