主題: 關於Apache Access Logs 作者: laifamily 於 三月 04, 2006, 09:28:07 下午 請問一下
我已經觀察到Apache Access Logs這檔案會一直的寫入新的資料 光光我ㄧ個管理員進進出出網站的 他就已經增長的蠻大了 有1MB多了 我現在都只有進去把該檔清空 如果一個多人使用的lifetype網站 這個檔就會增長的更快 請問有沒有什麼方法 如加入一些命令列 讓它改成每日為單位記一個檔案或著周記 或著讓它每10MB換一個檔名寫 這樣用戶就可以把舊Access Logs的檔 移到其他的地方儲存 好方便管理 謝謝 主題: Re: 關於Apache Access Logs 作者: lss 於 三月 04, 2006, 10:54:11 下午 你是 linux 主機嗎?介紹你看這個: 認識與分析登錄檔 (http://linux.vbird.org/linux_basic/0570syslog.php) 。
初學 linux ,記得有事沒事,常去 鳥哥的私房菜 (http://linux.vbird.org) 網站朝拜朝拜。 lss 主題: Re: 關於Apache Access Logs 作者: laifamily 於 三月 04, 2006, 11:26:16 下午 Sorry 我忘了寫下我的工作環境
由於不熟析linux的語法 但看了Apache 設定檔案裡面的程式碼 遲遲未能下手 謝謝你的資訊 我會去研究研究 My system: Windows xp pro sp2 + Lifetype togo 1.0.2 beta 主題: Re: 關於Apache Access Logs 作者: lss 於 三月 05, 2006, 12:14:01 上午 在 google 蒐到這一篇: Creating Log Archives on Windows 2000 - Printable View (http://linux.vbird.org/linux_basic/0570syslog.php) 應該可以配合 windws 「排定的工作」 使用來遠成目的,參考看看。
lss 主題: Re: 關於Apache Access Logs 作者: hlps9999 於 三月 05, 2006, 12:56:17 上午 lss:
在 google 蒐到這一篇: Creating Log Archives on Windows 2000 - Printable View (http://linux.vbird.org/linux_basic/0570syslog.php) 應該可以配合 windws 「排定的工作」 使用來遠成目的,參考看看。 你那連結的網址連錯了(連到了鳥哥那裡去了)lss 幫忙補上 http://www.netadmintools.com/part228.html 主題: Re: 關於Apache Access Logs 作者: lss 於 三月 05, 2006, 01:33:22 上午 :-$ 忙中有錯 :-P
謝謝阿欣幫忙更正。 lss 主題: Re: 關於Apache Access Logs 作者: laifamily 於 三月 05, 2006, 07:48:44 上午 謝謝lss的網址和hlps9999的幫忙
我照著網上的步驟在DOS下做了一遍 >< 好像行不通 不過 我也想了個土方法 那就是 每週由我自行人力備份 接著清除. :-S My system: windows xp pro sp2 + lifetype to go 1.0.2 beta 主題: Re: 關於Apache Access Logs 作者: hlps9999 於 三月 05, 2006, 10:12:07 上午 剛剛玩了一下「Creating Log Archives on Windows 2000 - Printable View (http://www.netadmintools.com/part228.html)」的方法,蠻好用的。
寫一下我的操作過程: 1.將上面網站所說的 引用 FOR %%V IN (%1) DO FOR /F "tokens=1-3 delims=/ " %%A IN ("%%~tV") DO copy "%%V" %%A%%B%%C%%~xV 將這一段文字,儲存成 logrotate.bat 2.將 logrotate.bat 放到 C:\LifeType ToGo!\diskw\usr\local\apache2\logs 裡 3.為了讓Windows來做「排定的工作」,再寫一個批次檔 do-logrotate.bat 引用 logrotate.bat access.log 同樣將這個 do-logrotate.bat 放在C:\LifeType ToGo!\diskw\usr\local\apache2\logs 裡4.去Windows「控制台」/「排定的工作」,去新增一個執行「do-logrotate.bat」的工作(可以設定每天一次) 等時間到,這樣你就會有個 200X0X0X.log 的檔案了。 若是只希望保留30天內的,將 logrotate.bat改成 引用 FOR %%V IN (%1) DO FOR /F "tokens=3 delims=/ " %%A IN ("%%~tV") DO copy "%%V" %%A%%~xV 這樣就只會有 01.log~31.log 目前還在試,如何把舊的access.log清空??有幾種方式可行,慢慢嘗試中。 主題: Re: 關於Apache Access Logs 作者: markwu 於 一月 08, 2007, 10:30:55 上午 mmm ... 我來想想把這一段 Script 包到 LifeType ToGo! 1.1.3 裡面。
Mark 主題: Re: 關於Apache Access Logs 作者: hsiaosh 於 一月 26, 2007, 06:26:10 下午 因為我學校的社群也是架在Windows2003上,剛好有這個需要,原先是參照阿欣老師的作法,將那個批次檔,利用工作排程去做,但不會自動清空內容,檔案還是會累積越來越大,所以在網路上查詢找到了以下的資料,可以提供出來給個參考。
學校主機是採用 appserv 2.4.7版 ******************************************************************************* ◆ 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" 這樣之後,它會自動每天更換一個檔名,來做為記錄檔使用,也不必去清空它的內容,感覺還不錯。 主題: Re: 關於Apache Access Logs 作者: markwu 於 一月 27, 2007, 10:01:38 上午 hsiaosh:
看起來不錯,我會結合你跟阿欣的作法把他加到 Instant LifeType 裡面。不過這只有 Apache的部分,我得來想想 Lighttpd 如何設定。 Mark 主題: Re: 關於Apache Access Logs 作者: mouson 於 三月 23, 2007, 01:03:26 上午 感謝大家的資訊
在這邊我將使用批次檔 及 rotatelogs.exe 的兩種方法都實驗過了 對上面的兩種實作基本上都是可行的 但都遇到了一些問題 由於我的環境使用Apache 的Virtual host且每一個host都有自己的log檔 首先我一開始是使用rotatelogs.exe 的方法 在Win上面實作時不知道為什麼,在Apache 啟動的時候 Apache會開啟rotatelogs.exe這一個執行檔 而且是每一個log檔一個, 假如有三個host每個host都有error log及access log 這樣子就一次會有六個rotatelogs.exe 啟動起來 上面看起來不是什麼問題 但是 不知道為什麼,當apache的服務在stop的時候, rotatelogs.exe是不會跟著stop的 所以就會發生自己在修改apache config等等 需要一值重新啟動apache時 apache因為一堆已經啟動的rotatelogs.exe 吃掉記憶體 而無法啟動 接著第二個方法 我有在嘗試使用批次檔的方式 使用上目前都是可以的 但是這樣的作法 log檔沒有辦法每天清空 所以log檔縱使每天複製一份出去,但所複製出來的, 會還包含著從啟動開始的log紀錄 第二個方法我自己有透過修改批次檔 來達到可以同時複製所有的log檔 而且每天會清空原本的log檔 以下就分享我自己所寫出來的log檔 程式碼:
第二行就是在複製批次檔擺放的那個資料匣下 所有 以"_"開頭 ".log"結尾的檔案 並且複製為 年月日 檔名.log 第三行的地方是在刪除原本的批次檔 同樣的 建立了這樣的一個批次檔之後 透過Win的排程設定,就可以達到每天更新log的效用了!! 至於為什麼要停止Apache來做這件事情呢? 主要是因為所有的log檔如果在apache啟動的狀況下 會因為控制權在Apache下,而無法刪除log檔 但我又一值無法找到使Apache啟動的狀況下清空Log檔的方法 所以只好透過停止Apache的方式來達到。 這邊是我參考MS的批次檔撰寫 http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-cht/library/ServerHelp/89fdf70e-7d52-4f45-865d-6a61963a3a7e.mspx?mfr=true |