apache日誌切割

對於搭建的網站來說,訪問的話就會有訪問日誌。

 

就對我們所搭建的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文件大小滾動,而不是按照時間或時差滾動。

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章