配置web伺服器時,一般我們都會記錄下請求的資訊,以及錯誤的相關資訊。
ErrorLog "/home/zhangy/apache/www.test.com-error.log"
CustomLog "/home/zhangy/apache/www.test.com-access.log" common
做了上面的配置,如果你不定期刪除的話,我想隨著時間的推移,這些記錄檔能達到幾個G的大小。佔用資源不說,還不利於我們查看日誌資訊。其實對訪問資訊,以及錯誤錯誤只是為了協助我們瞭解伺服器的訪問,運行情況,個人覺得只要瞭解近期的就OK了。
下面有2種方法可以解決這個問題
1,rotatelogs這樣日誌復原的工具
用法
rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
-l 使用本地時間代替GMT時間作為時間基準。注意:在一個改變GMT位移量(比如夏令時)的環境中使用-l會導致不可預料的結果。
logfile 它加上基準名就是記錄檔名。如果logfile中包含"%",則它會被視為用於strftime()的格式字串;否則它會被自動加上以秒為單位的".nnnnnnnnnn"尾碼。這兩種格式都表示新的日誌開始使用的時間。
rotationtime 記錄檔滾動的以秒為單位的間隔時間。
offset 相對於UTC的時差的分鐘數。如果省略,則假定為"0"並使用UTC時間。比如,要指定UTC時差為"-5小時"的地區的當地時間,則此參數應為"-300"。
filesizeM 指定以filesizeM檔案大小滾動,而不是按照時間或時差滾動。
解決方案:
ErrorLog "|/usr/local/apache2/bin/rotatelogs /home/zhangy/apache/www.test.com-error.log.%Y-%m-%d-%H_%M_%S 10M"
CustomLog "|/usr/local/apache/bin/rotatelogs /home/zhangy/apache/www.test.com-access.log 10M" commom
當日誌大小達到10M時,日誌就會滾動,產生新的日誌。當然你可以根據時間來進行滾動,把10M換成36000,表時日誌10個小時滾動一次。
[zhangy@BlackGhost apache]$ ls -tr |grep test
www.test.com-error.log
www.test.com-access.log
www.test.com-error.log.2010-11-05-14_50_00
www.test.com-access.log.1288968528
www.test.com-error.log.2010-11-05-14_48_20
www.test.com-access.log.1288968677
www.test.com-error.log.2010-11-05-14_56_40
www.test.com-error.log.2010-11-05-15_55_00
www.test.com-access.log.1288969444
2,利用graceful啟動
用優雅的(graceful)方法重新啟動,可以使伺服器啟用新的記錄檔,而不丟失原來尚未寫入的資訊。為此,有必要等待一段時間,讓伺服器完成正在處理的請求,並將記錄寫入到原來的記錄檔。下面是日誌滾動和為節省儲存空間而壓縮舊日誌的例子,其實這些日誌也可以不要,看個人需要
[zhangy@BlackGhost apache]$ find . -name "*51yip*" |xargs -i mv {} {}.bak
[zhangy@BlackGhost apache]$ sudo /etc/init.d/apache2 graceful
[zhangy@BlackGhost apache]$ sudo sleep 100
[zhangy@BlackGhost apache]$ find . -name "*.bak" |xargs -i tar czvf logbak.tar.gz {}
./www.51yip.com-access.log.bak
./www.51yip.com-error.log.bak