我已经安装并运行了Apache 2,将内容记录到名为“access / error.txt”的/ logs文件夹中。我想知道,正如我做了很多,如何让Apache为每个生成一个新的ACCESS日志文件连接的唯一IP,并在其各自的文件中记录该用户的所有请求。例如,一个人在173.49.91.61访问我的服务器,apache自动生成/logs/173.49.94.61.txt并记录对它的所有访问。得到它?
谢谢,我不知道这是否可行。希望有人知道。 无意识地抱怨自己
答案 0 :(得分:0)
首先让我说这通常是一个坏主意,因为每个IP地址都有一个文件。您可能认为这很酷且易于管理,直到您的站点有200万+唯一访问者并且您开始遇到重大问题。这些问题包括:磁盘性能非常低,无法在日志记录目录中轻松ls
和rm
,并且在磁盘空间不足之前可能会耗尽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";
}
}
这个脚本只是一个例子,因为它会有竞争条件和性能问题,因为它会在每次输入时打开和关闭文件。但是,要小心,好像你一次打开太多文件句柄,你将无法再打开。