对于搭建的网站来说,访问的话就会有访问日志。

 

就对我们所搭建的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文件大小滚动,而不是按照时间或时差滚动。