標題:Apache Server log 肥大的問題 出處:MaruMagi部落格之拷貝經驗 時間:Fri, 26 Nov 2010 17:24:36 +0000 作者:zuyan 地址:http://maru.gates.tw/read.php/256.htm 內容: 由於Apache 流量漸漸增加而,Log檔一直增大,到時會很難處理 必需要解決這個問題,查了一下資料 可以使用 apache 內建的一支程式處理 rotatelogs 我希望的存檔方式是每10MB即存成另一個檔案 記錄的方式為 主機名+日期 範例如下 ...... ErrorLog "logs/maru.gates.tw.log" #原來的設定方式 #CustomLog "logs/maru.gates.tw.log" common #修改後的方式 CustomLog "|D:/AppServ/Apache2.2/bin/rotatelogs D:/AppServ/Apache2.2/logs/maru.gates.tw%Y%m%d.log 10M" common ....... 引用 ◆ Windows下的日誌循環   一般在Linux下的日誌循環可以由系統的 /etc/logrotate.conf 設定,而 Apache 的日誌循環設定檔在 /etc/logrotate.d/httpd 中(以Redhat/Fedora為例),預設為一星期循環一次。有關系統日誌循環請參考相關教學文章。   但是若您的Apache是安裝在Windows的系統中,日誌原則上(預設值)是不會循環的,所以若您一直沒有清除或手動循環log檔,一個檔案上GB大小也是有可能的,若需要去解析它可能要花很久的時間。Apache本身提供了 rotatelogs (在Windows下為 rotatelogs.exe) 這個指令來循環日誌,讓你可以手動執行指令(請參考 rotatelogs 指令教學) ,或是直接在 httpd.conf 中設定,範例如下: 每天循環(一天為86400秒) CustomLog "|c:/apache2/bin/rotatelogs c:/apache2/logs/access_log 86400" combined 檔案到達5MB就循環 CustomLog "|c:/apache2/bin/rotatelogs c:/apache2/logs/access_log 5M" common 但這樣設定的話,它所產生的Log檔案名稱格式為 access_log.nnnn,後面的 nnnn 由系統自動產生,例如:access_log.1168300800,但這樣的話比較不容易維護或分析,您可以把它改成這樣: 每天循環(一天為86400秒) CustomLog "|c:/apache2/bin/rotatelogs c:/apache2/logs/access_log_%Y%m%d 86400" combined 如此產生出來的檔案名稱會像這樣:access_log_20070110 若您想自訂檔案名稱的日期格式,可以參考以下的設定值: %A - full weekday name (localized) %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 `%' 完成以上 設定後,重新啟動 Apache 即可。 ******************************************************************************* 使用之前,請先把httpd.conf中,關於access.log的部分,先disable掉。 ->CustomLog logs/access.log common 改成 ->#CustomLog logs/access.log common 也就是加個 "#" 即可。 依據自己實際測試後,發現上面所舉的例子,對我並不適用 ->CustomLog "|c:/apache2/bin/rotatelogs c:/apache2/logs/access_log 86400" combined 我是把它改成如下的方式: TransferLog "|c:/AppServ/Apache2/bin/rotatelogs.exe c:/AppServ/Apache2/logs/%Y%m%d_access.log 86400" ErrorLog "|c:/AppServ/Apache2/bin/rotatelogs.exe c:/AppServ/Apache2/logs/%Y%m%d_error.log 86400" 這樣之後,它會自動每天更換一個檔名,來做為記錄檔使用,也不必去清空它的內容,感覺還不錯。 參考資料 http://forum.lifetyp...hp?topic=2010.5;wap2 Generated by Bo-blog 2.1.1 Release