2011-07-08 22 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

我每天只能获得几百位独立访问者,所以它不应该太多。但是,谢谢。 –