Apache日志,通过IP命名?

时间:2011-07-08 04:37:25

标签: apache logging ip

我已经安装并运行了Apache 2,将内容记录到名为“access / error.txt”的/ logs文件夹中。我想知道,正如我做了很多,如何让Apache为每个生成一个新的ACCESS日志文件连接的唯一IP,并在其各自的文件中记录该用户的所有请求。例如,一个人在173.49.91.61访问我的服务器,apache自动生成/logs/173.49.94.61.txt并记录对它的所有访问。得到它?

谢谢,我不知道这是否可行。希望有人知道。 无意识地抱怨自己

1 个答案:

答案 0 :(得分:0)

首先让我说这通常是一个坏主意,因为每个IP地址都有一个文件。您可能认为这很酷且易于管理,直到您的站点有200万+唯一访问者并且您开始遇到重大问题。这些问题包括:磁盘性能非常低,无法在日志记录目录中轻松lsrm,并且在磁盘空间不足之前可能会耗尽inode。你被警告了。

那就是说,如果真的仍然想要这样做,那么apache有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";
    }

}

这个脚本只是一个例子,因为它会有竞争条件和性能问题,因为它会在每次输入时打开和关闭文件。但是,要小心,好像你一次打开太多文件句柄,你将无法再打开。