我在本地计算机上使用Apache为我的组托管了一些文档。
我已在/var/www/html
下复制/链接了文档。
是否有办法为每个请求记录带有时间戳的请求?
答案 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,因为他们有很多解释,特别是在日志修饰符上。