那么我们为什么要控制日志记录呢?
如果一个站点访问量特别大,那么访问日志就会很多,但有一些访问日志是可以忽略掉的,比如网站的一些图片,还有 js, css等静态对象。而这些文件的访问往往是巨量的,而且即使记录这些日志也没有什么用,所以可以过滤掉这些访问的日志。
具体怎么做,还是让KK来和你一起学习吧!
编辑虚拟主机的配置文件
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
在相应的虚拟主机中加入配置文件如下:
SetEnvIf Request_URI ".*\.gif$" image-request
SetEnvIf Request_URI ".*\.jpg$" image-request
SetEnvIf Request_URI ".*\.png$" image-request
SetEnvIf Request_URI ".*\.bmp$" image-request
SetEnvIf Request_URI ".*\.swf$" image-request
SetEnvIf Request_URI ".*\.js$" image-request
SetEnvIf Request_URI ".*\.css$" image-request
ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/aaa-error-%Y%m%d.log 86400"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/oem.discuz.qq.com-access_%Y%m%d.log 86400" combined env=!image-request
哇,好多东东,宝宝怕~~
不要慌张撒,我来带你看一下具体的语句意思
SetEnvIf是Apache的一个模块,我查了好多百度,只说是配置不记录特定日志的,却没说出个所以然,所以Google喽!在Apache官网上找到如下解释:
Themod_setenvifmodule allows you to set internal environment variables according to whether different aspects of the request match regular expressions you specify. These environment variables can be used by other parts of the server to make decisions about actions to be taken, as well as becoming available to CGI scripts and SSI pages.
大概就是SetEnvIf就是一个根据你给出的正则表达式,设置内部环境变量的东东,怎么样?简单吧。
SetEnvIf Request_URI ".*\.png$" image-request 这句话的意思就是把Request_URI中匹配正则表达式".*\.png$"的部分赋值给变量image-request。那正则表达式".*\.png$"又是什么东东,这个呢代表了任何以.png结尾的文件。所以所有的setenvif request_uri就解释完了。
!代表非 env=!image-request放在CustomLog后面代表不要变量image-request所代表的这些内容,所以就就能过滤日志啦
保存文件重启Apache服务器
/usr/local/apache2/bin/apachectl graceful
测试
现在去打开咱们的网页访问以下,就会产生日志信息了,可以到/usr/local/apache/logs中去查看是否生成了相应的日志文件,如果看不到错误日志,可以尝试访问错误的本站资源 就可以看到生成的错误日志了(www.123.com/asd.php)
残留问题
我现在只有一个搭建的Discuz论坛,我访问了好多次,但是并没有产生什么以png,gif等图片格式结尾的路径,可能是论坛问题,自己也不会日志的分析,所以这次除了感觉日志名字变了之外,臣妾实在是看不到效果啊~、~
网友评论