感謝大家的資訊
在這邊我將使用批次檔 及 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檔
NET Stop Apache2.2
FOR %%V IN (_*.log) DO FOR /F "tokens=1-3 delims=/ " %%A IN ("%%~tV") DO copy "%%V" %%A%%B%%C%%~nV%%~xV
FOR %%V IN (_*.log) DO DEL /s /q %%V
NET Start Apache2.2
首先第一行與第四行主要的功用為停止Apache及啟動Apache服務
第二行就是在複製批次檔擺放的那個資料匣下 所有 以"_"開頭 ".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