:::
::: 您的位置:首頁 > 知識寶庫 > IIS知識大補帖.友善列印,開新視窗
  IIS知識大補帖 訂閱IIS知識大補帖
     
 
推文至 facebook 推文至 plurk  | 回列表 |
IIS知識大補帖
標題 IIS日誌自動刪除程式
發布日期 2017/6/17
發布單位 mis
點閱次數 3435
詳細內容

 IIS日誌自動刪除程式

 很多使用Windows IIS的站長可能都會遇到這個問題,就是伺服器的IIS日誌增長經常會導致磁碟空間被占滿,而IIS也沒有自動刪除日誌的功能,因此需要經常關注即時清理日誌,因此我這裡就介紹一個能夠自動刪除IIS日誌的程式。

這個刪除程式的功能很簡單,每天自動刪除N天前的日誌(時間根據情況自己設置,一般設置為30天),可以使用DOS批次處理或VBS腳本來實現。

在下邊的解決方案裡請大家可以選擇適合自己的,總體設計思路是這樣的:

IIS日誌的格式是:ex年月日.log 比如:ex071116.log

IIS日誌存儲位置:預設情況下是在:%windir%/system32/LogFiles ,如果您使用的是專業的IIS管理軟體,裡面一般會讓你設置相應日誌目錄。

IIS日誌清理批次處理版:跟據目前時間計算出前N天的日期,比如今天是:2007-11-16,前60天的日期就是2007-9-16(程式可以自動識別30天或31天或潤月),然後再處理成20070916這樣的格式,然後再組合成ex070916.log這樣的IIS日誌檔案格式,這樣一來我們就得到的要清理的日誌檔案名然後,我們再使用del /s /f d:/iislog/ex070916.log 來清除日誌所在資料夾目錄及子目錄下的所有這個檔案名的檔了,從而清除志,但這個僅僅是清除一天的日誌,所以我們還得把這個批次處理加到計畫任務裡,讓它每天定時執行,這樣一來,所有的電腦的日誌問題我們就可以不用管了。

IIS日誌清理VBS版:VBS版理論是沒有iis版快,因為他還要借助腳本驅動,而不像cmd版直接使用dos系統的批次處理功能快(猜的),VBS畢竟是高階語言,處理日期的能力用一句話就實現了,而CMD版得寫半頁。IIS日誌清理VBS版的實現用VBS遍歷IIS日誌所在目錄下的所有檔,及資料夾,然後取檔案名組合成日期型的,然後當前日期-這個日期,看看是不是超過了設定的天數,超過的話delete,這種思路有個好處就是一次可以清除N天前的所有記錄,而不是只是一天的,他可以你CMD版日誌清理一樣,把這個腳本寫到計畫任務裡,天天運行,也可以過一時間手動運行一次。這個代碼明顯比IIS日誌清理CMD版少了。

IIS日誌清理CMD版代碼(DelIISLog.bat)代碼如下:

@echo off 
title 
::設置當前日期前多少天或後多少天 
set/a beforedays=-3 
::設置目錄所在位置 
set dir="F:/log/" 
::當前日期換為天數並進行計算 
call :Date2Day %date:~0,10% days 
set/a days=%days%%beforedays% 
call :Day2Date %days% lastdate 
::計算完畢,生成想要的字元組合 
set okstr=ex%lastdate:~2,6%.log 
::刪除這些檔 
del del /f /s /q %dir%/%okstr% 
cmd /k 
:Date2Day 
setlocal ENABLEEXTENSIONS 
for /f "tokens=1-3 delims=/-, " %%a in (‘echo/%1′) do ( 
set yy=%%a & set mm=%%b & set dd=%%c 

set /a dd=100%dd%%%100,mm=100%mm%%%100 
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 
endlocal&set %2=%j%&goto :EOF 
:Day2Date 
setlocal ENABLEEXTENSIONS 
set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a 
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5 
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%) 
endlocal&set %2=%yy%%mm%%dd%&goto :EOF

IIS日誌清理VBS版代碼(DelIISLog.vbs)代碼如下:

‘IIS日誌清理VBS版代碼(DelIISLog.vbs) 
‘調用方法:DelIISLog "IIS日誌所在路徑",保留多少天的IIS日誌 
‘遍歷IIS日誌資料夾下的所有檔及子資料夾下的檔 
Function DelIISLog(IISLogPath,KeepDays) 
on error resume next 
Set oFso = CreateObject("Scripting.FileSystemObject") 
Set oFolder = oFso.GetFolder(IISLogPath) 
Set oSubFolders = oFolder.SubFolders ‘得到該目錄下所有的資料夾的集合 
Set oFiles = oFolder.Files ‘得到該目錄下所有的檔的集合 
‘第一步處理目前的目錄下的所有檔 
For Each oFile In oFiles ‘遍歷所有檔 
if right(oFile.name,3)="log" then 
oDate=cdate("20" & mid(oFile.name,3,2) & "-" & mid(oFile.name,5,2) & "-" & mid(oFile.name,7,2)) 
if date-oDate > KeepDays then oFile.delete ‘判斷是不是要處理的IIS日誌檔,如果是的話直接刪除 
end if 
Next 
‘第二步處理目前的目錄下的所有目錄,進行遞迴呼叫 
For Each oSubFolder In oSubFolders 
DelIISLog oSubFolder.Path,KeepDays ‘遞迴 
Next 
End Function 
DelIISLog "D:/IISLogTest",20 ‘遍歷

參考位置來源 : http://www.shellsec.com/tech/157503.html

相關連結 目前無資料
相關檔案 目前無資料