对于搭建的网站来说,访问的话就会有访问日志。
就对我们所搭建的discuz论坛来说,访问这个论坛就会有日志产生。
[root@No ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
找到以下内容:
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
ErrorLog是错误日志,CustomLog就是访问日志。
customlog就是apache的访问日志。
CustomLog "logs/dummy-host.example.com-access_log" common
//common表示日志的类型,名字。
日志的路径是一个相对路径,在/usr/local./apache2/logs下。
修改为以下内容:
ErrorLog "logs/test.com-error_log" CustomLog "logs/test.com-access_log" combined
:wq
//日志类型修改成combined
[root@No ~]# apachectl -t
Syntax OK
[root@No ~]# apachectl graceful
重新加载过apache后,刷新几次网页,现在我们来查看一下访问日志。
[root@No ~]# tail /usr/local/apache2/logs/test.com-access_log
可以看到很多的访问信息,我们以其中一条为例子,来看一下每段的含义。
#192.168.179.1——[17/Nov/2015:19:11:43 +0800] "GET /forum.php
mod=ajax&action=forumchecknew&fid=2&time=1447758300&inajax=yes HTTP/1.1" 200 64 "http://www.clnice.com/forum.php?mod=forumdisplay&fid=2" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 UBrowser/5.5.6743.204 Safari/537.36"
在apache的配置文件中找到以下内容,此内容和上面的访问日志是一一对应的。
[root@No ~]# vim /usr/local/apache2/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
%h就是来源ip即客户端ip,%l和%u是不存在的所以用——表示,%u是用户user,
%t时间,\"%r\" 表示动作,这里的动作是GET。
\“%{Referer}i\”指的是,它从哪里跳过来的。 比如你访问的一个网页地址是 http://123.com/1.html 这个页面中有一个网址http://234.com/2.html 你直接点这个链接进入到了 234.com/2.html 那这时候,日志中会记录一条日志 2.html 它的referer是 http://123.com/1.html 。
"%{User-Agent}i\"是浏览器的标示,可以用标示限制一些访问,比如用curl访问的我们可以去做一个限制,让它访问时候显示403.
%>s 可以用于记录请求的最终状态.
日志如果不去管理会越来越多,会占用磁盘的很多空间。就需要我们去做日志切割,然后每隔一段时间去清除旧的访问日志。
日志切割:
[root@No ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
找到
ErrorLog "logs/test.com-error_log"
CustomLog "logs/test.com-access_log" combined
修改为:
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/cest.com-access_%Y%m%d_log 86400" combined
|/usr/local/apache2/bin/rotatelogs -l :切割工具。
/usr/local/apache2/logs/clnice.com-access_log_%Y%m%d_log 86400
使用绝对路径,防止切割工具找不到这个日志。
//%Y%m%d 加上时间戳,四位的年,两位的月,两位的日
86400是秒相当于一天,就以一天为间隔切割。
错误日志是比较少的,可以不设置日志分割。
保存虚拟配置文件,重新加载apache后,刷新几下discuz论坛网页,我们再来看logs目录下的日志文件。可以看到test.com-access_20160323_log 这样格式的日志文件。
[root@No logs]# apachectl -t
Syntax OK
[root@No logs]# apachectl graceful
[root@No logs]# ls
access_log httpd.pid test.com-access_log
error_log test.com-access_20160323_log test.com-error_log
apache 日志切割问题
apache的日志是可以自动切割的。
方法一: 使用 cronolog 为每一天建立一个新的日志
CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined
也可以按小时
CustomLog "|bin/cronolog logs/access_%Y%m%d%h.log" combined
方法二:使用 rotatelogs 每一天记录一个日志
CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
每小时
CustomLog "|bin/rotatelogs -l logs/access_%Y%m%d%H.log 3600" combined
再看apache rotatelogs语法
rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
选项
-l
使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。所以一定要加上-l 否则出现的日志时间和实际时间是相差8小时的。
logfile
它加上基准名就是日志文件名。如果logfile中包含”%”,则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单位的”.nnnnnnnnnn”后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime
日志文件滚动的以秒为单位的间隔时间。
offset
相对于UTC的时差的分钟数。如果省略,则假定为”0″并使用UTC时间。比如,要指定UTC时差为”-5小时”的地区的当地时间,则此参数应为”-300″。
filesizeM
指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。