如何使用Apache记录页面请求?

时间:2011-03-14 06:13:39

标签: html apache http logging timestamp

我在本地计算机上使用Apache为我的组托管了一些文档。 我已在/var/www/html下复制/链接了文档。

是否有办法为每个请求记录带有时间戳的请求?

4 个答案:

答案 0 :(得分:9)

现在应该已启用日志记录,并记录到名为access_log的文件。我从未见过安装尚未开启的安装。

通常,在哪里登录的指令是在名为httpd.conf的文件中设置的。 大多数情况下,该文件位于/ var / log / apache2。

答案 1 :(得分:4)

假设您的apache服务器正在运行并且您具有shell访问权限:

这样做:

genja ~ # ps aux |grep apache|tail -n1 
root     23605  0.0  0.2 248636 10684 ?        Ss   Jun08   0:06 /usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D LANGUAGE -D MANUAL -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D PERL -D PROXY -D SCGI -d /usr/lib64/apache2 -f /etc/apache2/httpd.conf -k start

..这是一个apache守护程序进程。您正在寻找“-f /etc/apache2/http.conf”。 如果您的apache服务器没有被告知(通过发行版初始化脚本)在哪里获取配置文件,它将查找默认位置,该位置可能位于: / etc / apache2 / / etc / httpd / (或其他任何地方,真的,但这两个是最常见的)。在该文件夹中,您将找到一个名为 apache2.conf httpd.conf 的文件,只需试试这个:

find /etc/ -iname httpd.conf -o -iname apache2.conf

找到apache服务器的配置文件后,查找包含模块配置的行。在我的系统上它看起来像这样:

Include /etc/apache2/modules.d/*.conf

现在你需要找出日志文件的位置:

genja modules.d # grep CustomLog /etc/apache2/modules.d/*
00_mod_log_config.conf:# a CustomLog directive (see below).
00_mod_log_config.conf:CustomLog /var/log/apache2/access_log common
00_mod_log_config.conf:#CustomLog /var/log/apache2/referer_log referer
00_mod_log_config.conf:#CustomLog /var/log/apache2/agent_logs agent
00_mod_log_config.conf:#CustomLog /var/log/apache2/access_log combined

您正在寻找:CustomLog / var / log / apache2 / access_log common。
请注意,此CustomLog指令也可以位于主apache2.conf文件中 现在您拥有日志文件的位置。阻止服务器立即登录的最可能的事情是文件权限。确保CustomLog下的目录存在,并且apache服务器可以写入:

以root身份:

mkdir -p /var/log/apache2
touch /var/log/apache2/access_log
chown -R APACHEUSER /var/log/apache2
chmod 755 /var/log/apache2
chmod 644 /var/apache2/access_log

APACHEUSER很可能是apache或www甚至是httpd。您可以通过运行来解决这个问题:

genja ~ # ps aux |grep apache |awk '{print $1}'
apache
(...)
apache
root

因此,在我的系统上运行apache服务器的用户实际上称为apache。它不是根。或者至少不应该。

更改该文件的权限后重新启动服务器。我不知道你的发行版是如何做到的。我认为在ubuntu上有一个service [s]命令。但您始终可以直接运行init脚本:

/etc/init.d/apache restart(你的发行版可能位于不同的位置)如果你无法弄清楚如何重新启动apache服务器,只需重启整个计算机。

如果重新启动服务器后access_log文件为空,请在上述命令中将APACHEUSER更改为root。

毕竟这只是使用您喜欢的寻呼机或文本编辑器来查看日志。甚至可以使用tail -f来实时监控它。我希望这有帮助。冰川

答案 2 :(得分:1)

我可以想象你已经为你的 / var / www / html 文档根设置了一个虚拟主机(所谓的vhost)。 因此,您只需在特定的vhost中添加日志设置要求,即可获得特定的日志文件。

就像这个例子:

<VirtualHost *:80>

    DocumentRoot /var/www/html
    ServerName www.yourdomain.org
    ServerAdmin webmaster@domain.de

    <Directory "/var/www/html">
            Options FollowSymLinks MultiViews
            AllowOverride all
            Order allow,deny
            Allow from all
            # if you need some users basic authentication
            # AuthType Basic
            # AuthName "MY DOMAIN AUTHENTICATION"
            # AuthUserFile ${APACHE_BASEDIR}/conf.d/special_users
            # Require user foobar
    </Directory>

    # your log specific requirements
    # LOGS (overwriting previous conf See /etc/apache2/apache2.conf)
    # Possible values for LogLevel : debug, info, notice, warn, error, crit, alert, emerg.
    LogLevel info
    ErrorLog /var/log/apache2/my_special_error.log
    # Option 1 (recommended): you merge these specific logs with the overall log file name and format
    # CustomLog /var/log/apache2/access.log combined
    # Or, Option 2: you set up a specific log file for that domain
    LogFormat "%h %l %u %t \"%r\" %>s %b" my_special_access.log
    CustomLog /var/log/apache2/my_special_access.log
</VirtualHost>

您将在主apache配置文件中找到日志的格式,例如在debian中的 /etc/apache2/apache2.conf ,就像发行版一样。或者按照原样使用它们,或者在虚拟主机配置中覆盖它们。如果您不使用虚拟主机,那么这些原则并没有太大改变。

然后,您可以操作 access.log 文件来提取,分析,复制或执行任何操作。您可以在shell bash脚本(或perl甚至python或C或......)中执行此操作。我建议使用bash,你可以很容易地自动化为cronjob。

答案 3 :(得分:0)

LogFormat "%h %l %u %t \"%r\" %>s %b" mylog
CustomLog logs/doc_root_access_log mylog

将输出如下(时间戳)到日志文件doc_root_access_log

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

你应该真正引用here,因为他们有很多解释,特别是在日志修饰符上。