The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

Apache log rotate 的另一個選擇:cronolog

雖然 Apache 的 mod_log_config 模組本身有內建 TransferLog 參數(Directive)與 rotatelogs 工具,可供設定固定時間產生一個 Log 檔,例如說你想要每天產生一個 AccessLog 可以用以下設定:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
TransferLog "|/usr/sbin/rotatelogs /var/logs/apache2/access_log 86400"

不過,缺點是他最多只能設定到「固定時間」產生一個檔,例如說以上範例是設定每 86400 秒產生一個 Log 檔,檔案名稱固定長這樣:

access_log.1211414400
access_log.1211500800
access_log.1211587200
access_log.1211673600
access_log.1211760000
access_log.1211846400
access_log.1211932800
access_log.1212019200
access_log.1212105600
access_log.1212192000

也就是你設定的檔名後面加上一個時間戳記(Timestamp),這檔名實在不是很好看,從 Apache 2.0 之後的 rotatelogs 工具新增了一些功能,可以讓你設定自訂 Log 檔名格式,可以讓你輸出的檔名加上日期時間:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
TransferLog "|/usr/sbin/rotatelogs /var/logs/apache2/access_log.%Y-%m-%d-%H_%M_%S 86400"
不過我還是覺得怪怪的,因為他總是不能夠依照日曆天區分每天的 Log,也就是說每天產生一個 Log 的標準是從 0:00 ~ 23:59 的 Log,因為這個限制我找了另外一個好用的 log rotate 套件:cronolog

如果你用的是 Ubuntu 的話,只要執行以下指令就可以安裝完成了:

apt-get install cronolog

安裝好之後,你也可以用 dpkg-query -L cronolog 指令查看你到底安裝了哪些檔案在你的系統中:

root@ubuntu804:~/build/cronolog-1.6.2# dpkg-query -L cronolog
/.
/usr
/usr/bin
/usr/bin/cronolog
/usr/bin/cronosplit
/usr/sbin
/usr/sbin/cronolog
/usr/share
/usr/share/info
/usr/share/info/cronolog.info.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/cronolog.1m.gz
/usr/share/man/man1/cronosplit.1m.gz
/usr/share/doc
/usr/share/doc/cronolog
/usr/share/doc/cronolog/changelog.Debian.gz
/usr/share/doc/cronolog/TODO
/usr/share/doc/cronolog/README.Debian
/usr/share/doc/cronolog/copyright
/usr/share/doc/cronolog/changelog.gz
/usr/share/doc/cronolog/NEWS.gz
/usr/share/doc/cronolog/README.gz
/usr/share/doc/cronolog/ChangeLog.gz

如果你不是用 Ubuntu 的話,你要到 cronolog 網站下載套件回來自行編譯後安裝:

wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make
make check
make install

安裝好之後直接修改 Apache 的設定檔,將原本的 CustomLog 設定,假設你原本的設定是:

CustomLog /var/log/apache2/access_log combined

若要換成 cronolog 的設定可以參考以下設定:

CustomLog "|/usr/local/sbin/cronolog /var/log/apache2/access_log.%Y-%m-%d" combined

設定好之後記得重新載入新的 Apache 設定檔或重新啟動 Apache 才會讓新的設定生效。之後我們的 Log 檔名就會變成以下這樣,而且每天正好都是一個檔案。

access_log.2008-06-08
access_log.2008-06-09
access_log.2008-06-10
access_log.2008-06-11

若你想要參考更詳細的設定方式可以參考 Cronolog usage 網頁上的說明。

相關連結