如何在Apache日志中记录处理时间

如题所述

Apache日志中的处理时间

Apache的日志有很多可以自己定义的项目,其中一个 %T 能够显示出服务器处理请求所用的时间。我就是对这个的定义发生了疑问,所以做了一些考证。

在Apache2的中文手册中,是这样定义 %T 这个变量的。

%T 处理完请求所花时间,以秒为单位。

在Apache2的英文文档中,定义如下:

%T the time taken to server the request, in seconds.

由此可见,这个时间表示的是服务器处理这个请求的总时间。 而不是Apache服务器解析PHP脚本,并且输出脚本的时间。因此,我们可以看到同样的一个页面,网速比较慢的用户访问时间会长,而网速较快的用户访问,则时间比较短。

%T记录的是以秒为单位的时间,这对于我们来说是不太够的。因为很多情况下,我们需要保证我们网页的响应速度在1秒以内。从Apache 2.0 开始,提供了一个新的参数 %D。可以记录服务器处理请求的微秒时间(注意和%T的定义不同)。

我在服务器上做了一次测试,代码中嵌入了一个执行时间的检查判断,同时监视日志文件中产生的时间。结果为:页面监测脚本执行时间为10009206毫秒,而日志中记录的是10009838,两者时间并不一样,日志中记录的时间稍微长一些,包含了DNS查询等一系列的过程。

PS:由这个问题也可以衍生出一个如何测算客户端网速的问题。有这样一个办法,在Header中输出服务器的响应时间,用户收到后,判断收到的时间,这个时间差就是在服务器和客户端之间所消耗的时间。

参考资料:
1、Apache 2手册
2、Apache logs: how log does it take to server a request?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-09-07
在apache的配置文件httpd.conf中找到
ErrorLog logs/error_log及CustomLog logs/access_log common
Linux系统配置方法:
将其改为
ErrorLog “| /usr/local/apache/bin/rotatelogs /home/logs/www/%Y_%m_%d_error_log 86400 480″
CustomLog “| /usr/local/apache/bin/rotatelogs /home/logs/www/%Y_%m_%d_access_log 86400 480″ common
Windows系统下配置方法:
ErrorLog “|bin/rotatelogs.exe logs/site1/error-%y%m%d.log 86400 480″
CustomLog “|bin/rotatelogs.exe logs/site1/access-%y%m%d.log 86400 480″ common
其中common为日志记录格式里设置的名称。
若有多个站点,则应将以上配置写到各站点的VirtualHost节点中,这样才会分开文件记录各站点日志。
附rotatelogs说明
rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]
选项
logfile
它加上基准名就是日志文件名。如果logfile中包含’%’,则它会被视为用于的strftime(3)的格式字串;否则,它会被自动加上以秒为单位的.nnnnnnnnnn后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime
日志文件回卷的以秒为单位的间隔时间,86400 表示一天,即每天生成一个新的日志文件。
offset
相对于UTC的时差的分钟数。如果省略,则默认为0,并使用UTC时间。比如,要指定UTC时差为-5小时的地区的当地时间,则此参数应为-300,北京时间为+8时间,应设置为480。这样日志里的时间才会和服务器上的时间一致,方便查看日志。
filesizeM
指定回卷时以兆字节为单位的后缀字母M的文件大小,而不是指定回卷时间或时差。
第2个回答  2015-01-02
您好,很高兴为您解答。

看下这个帖子:http://www.cnblogs.com/cocowool/archive/2011/05/13/2045640.html

如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~本回答被提问者和网友采纳
相似回答