對於搭建的網站來說,訪問的話就會有訪問日誌。
就對我們所搭建的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文件大小滾動,而不是按照時間或時差滾動。