Apache Log Rotate 設定

Apache log 裡面包含有很多有用資訊, 包括偵測攻擊行為及正常存取量等, 但如果一直不理會記錄檔的話, 會佔用很多硬碟空間, 所以設定 log rotate 是必須的, Apache 內建 rotatelogs 工具可以做 log rotate, 實現方法如下:

1. 開啟 httpd.conf, 找到 CustomLog 及 ErrorLog 的設定行.

2. 例如原來 CustomLog 及 ErrorLog 寫成:

CustomLog /var/log/httpd/access.log combined
ErrorLog /var/log/httpd/error.log

以我的設定為例, 將這兩行改成這樣:

CustomLog “|/usr/sbin/rotatelogs -l /var/log/httpd/access-%Y%m%d.log 604800” combined
ErrorLog “|/usr/sbin/rotatelogs -l /var/log/httpd/error-%Y%m%d.log 604800”

以上是用 Apache 預設的 rotatelogs 工具進行 log rotate, 會產生類似這樣的 log:

access-20150423.log
error-20150423.log

裡面的 “%Y%m%d” 是指定 “年月日” 格式, 例如 20150423, 而 604800 是輪替的時間, 單位是秒, 這裡 604800 秒即一星期。
而 “-l” 是設定根據系統時間做輪替, 如果沒有加入這個選項也可以, 只是輪替時間會根據 GMT 時間, 例如香港 GMT+8 時區為例, 會在早上 8:00 才做輪替。


如果不想根據時間做輪替, 而是根據檔案體積輪替的話, 格式是這樣寫:

CustomLog “|/usr/sbin/rotatelogs /var/log/httpd/access-%Y%m%d.log 100M” combined

上面 log 後面的數字最後加入了 “M”, 即不是以時間輪替, 而且以 100MB 為體積上限輪替。

其他設定參數:
%a – 3-character weekday name (localized)
%B – full month name (localized)
%b – 3-character month name (localized)
%c – date and time (localized)
%d – 2-digit day of month
%H – 2-digit hour (24 hour clock)
%I – 2-digit hour (12 hour clock)
%j – 3-digit day of year
%M – 2-digit minute
%m – 2-digit month
%p – am/pm of 12 hour clock (localized)
%S – 2-digit second
%U – 2-digit week of year (Sunday first day of week)
%W – 2-digit week of year (Monday first day of week)
%w – 1-digit weekday (Sunday first day of week)
%X – time (localized)
%x – date (localized)
%Y – 4-digit year
%y – 2-digit year
%Z – time zone name
%% – literal
%s – 1970/01/01 00 開始時間


Leave a Reply