IIS日志清理专题,CMD版,VBS版,JS版,WSH版

来源:互联网 发布:阿里大数据分析 编辑:程序博客网 时间:2024/06/05 03:36

完整无错版请点击:
IIS日志清理专题,CMD版,VBS版,JS版,WSH版

专题名称:IIS日志清理专题,CMD版,VBS版,JS版,WSH版

关键词:IIS日志清理,日志清理,IIS日志清理CMD版,IIS日志清理VBS版,IIS日志清理JS版,IIS日志清理WSH版

应用场合:主要用与虚拟主机,也可用于个人服务器

产生背景:2005年某月某日,一向运行正常的虚拟主机死机了,让机房值班人员重启数次,都不成,接显示器进系统看,提示:C盘空间不足,半夜还得去机房处理,到机房后先断网,再进系统发现有两个地方有问题,C:/WINDOWS/system32/LogFiles文件有6G,还有一个就是Symantec隔离病毒的地方,到网上找了下,最大可能性是我们的虚拟主机的所有日志都写在这里,并且没人知道写在这里,郁闷,在IIS里看了下,还真是这么回事,日志天天都在长,当时公司订单很多也没人关注这个,当时清理了一下,系统正常,回到公司后把IIS日志改到别的盘了。

解决方案:不过这不是最终解决方法呀,一个虚拟主机几百个站点呢,有的站点一天就能产生几百M的日志文件,还得及时清理。
与是有了两种解决方案:
1.每天清理前60天的日志
2.过段时间清理一下60天前的日志。
不过哪种方法都得采用技术处理,人工去删除 的话除非你很专业,可以查找60天前的日志文件来删除,不过即便你技术很好,这种方法也是很费时的,最好的方法是:使用DOS批处理或脚本来实现,可使用到的脚本主要是vbs与js.

在下边的解决方案里有几种方法大家可以选择适合自己的,他们的总的设计思路是这样的:

IIS日志文件的格式是:ex年月日.log 比如:ex071116.log
IIS日志文件存储位置:默认情况下是在:%windir%/system32/LogFiles ,如果您使用的是专业的IIS管理软件,里面一般会让你设置相应日志目录

IIS日志清理CMD版:跟据当前时间计算出前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日志清理JS版:这个版其实与IIS日志清理VBS版差不了多少,思路都是一样的,只是使用的脚本语言不一样而已,还有就是调用时的两个参数里的每一个参数:目录,这个目录得写成:D://iislog,以前都用vbs还当主要脚本,这次主要是要学C#了,听说这两种语言都差不多,正好也练习下,也没花多少时间。

IIS日志清理WSH版:WSH版其实是最简单的,因为他的集成化程度很高,操作过程是这样的:使用vbs或js生成要处理的文件的文件名,然后再使用WScript.Shell执行cmd命令来处理,利用了IIS日志清理CMD版IIS日志清理VBS版的优点,这个也是一次只能处理一天的日志,当然您也可以把它改成处理多天的日志。正因为WSH集成化程度高,可以执行很多操作,所以黑客们都很喜欢这个,用的最多的也就是WScript.Shell,所以一般安全意识比较高的服务器提供商都会把这个组件给禁用掉,这样一来,这个最好用的功能就变成了最不能使用的,通用性最差的了。

实例代码:

IIS日志清理CMD版代码(DelIISLog.cmd):

@echo off 
title Made by www.yongfa365.com
::设置当前日期前多少天或后多少天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):

view plaincopy to clipboardprint?
  1. 'IIS日志清理VBS版代码(DelIISLog.vbs)  Made by www.yongfa365.com   
  2. '调用方法:DelIISLog "IIS日志所在路径",保留多少天的IIS日志   
  3.   
  4. '遍历IIS日志文件夹下的所有文件及子文件夹下的文件   
  5. Function DelIISLog(IISLogPath,KeepDays)   
  6. on error resume next  
  7.     Set oFso = CreateObject("Scripting.FileSystemObject")   
  8.     Set oFolder = oFso.GetFolder(IISLogPath)   
  9.     Set oSubFolders = oFolder.SubFolders  '得到该目录下所有的文件夹的集合   
  10.     Set oFiles = oFolder.Files '得到该目录下所有的文件的集合   
  11.     '第一步处理当前目录下的所有文件   
  12.     For Each oFile In oFiles '遍历所有文件   
  13.         if right(oFile.name,3)="log" then  
  14.             oDate=cdate("20" & mid(oFile.name,3,2) & "-" & mid(oFile.name,5,2) & "-" & mid(oFile.name,7,2))   
  15.             if date-oDate > KeepDays then oFile.delete '判断是不是要处理的IIS日志文件,如果是的话直接删除   
  16.         end if  
  17.     Next  
  18.     '第二步处理当前目录下的所有目录,进行递归调用   
  19.     For Each oSubFolder In oSubFolders   
  20.         DelIISLog oSubFolder.Path,KeepDays '递归   
  21.     Next  
  22.   
  23. End Function  
  24.   
  25. DelIISLog "D:/IISLogTest",20 '遍历  

IIS日志清理JS版代码(DelIISLog.js):

view plaincopy to clipboardprint?
  1. //IIS日志清理JS版代码(DelIISLog.js)  Made by www.yongfa365.com   
  2. //调用方法:DelIISLog("IIS日志所在路径",保留多少天的IIS日志);   
  3.   
  4. //遍历IIS日志文件夹下的所有文件及子文件夹下的文件   
  5. function DelIISLog(IISLogPath,KeepDays){   
  6.     var fso = new ActiveXObject("Scripting.FileSystemObject");   
  7.     var f = fso.GetFolder(IISLogPath);   
  8.     var Folders = new Enumerator(f.SubFolders); //得到该目录下所有的文件夹的集合   
  9.     var Files = new Enumerator(f.Files); //得到该目录下所有的文件的集合   
  10.     //第一步处理当前目录下的所有文件   
  11.     for (; !Files.atEnd(); Files.moveNext()) {   
  12.         var fileName = Files.item().name;   
  13.         var year = "20" + fileName.substr(2, 2);   
  14.         var mouth = fileName.substr(4, 2);   
  15.         var day = fileName.substr(6, 2);   
  16.         var days = Math.round(((new Date()).getTime() - Date.UTC(year, mouth - 1, day)) / 1000 / 60 / 60 / 24);   
  17.         if (days > KeepDays) Files.item().Delete(); //判断是不是要处理的IIS日志文件,如果是的话直接删除   
  18.     }   
  19.     //第二步处理当前目录下的所有目录,进行递归调用   
  20.     for (; !Folders.atEnd(); Folders.moveNext()) {   
  21.         DelIISLog(Folders.item(),KeepDays);   
  22.     }   
  23. }   
  24. //调用函数,比如:"F://log",5  或 "C://windows//system32//LogFiles",5   
  25. DelIISLog("D://IISLogTest",2);  

IIS日志清理WSH版代码(DelIISLog.wsf):

view plaincopy to clipboardprint?
  1. <job id="IIS日志清理WSH版代码(DelIISLog.wsf) Made by www.yongfa365.com">   
  2.     <script language="vbscript">   
  3.         '作者:柳永法(yongfa365)'Blog   
  4.         '修改:2007-11-15   
  5.         '操作说明:此文件只能清除一天的日志,得使用计划任务让其每天执行一次,因为服务器上一般都禁用WScript.Shell,所以不推荐使用   
  6.         Function DelIISLog(IISLogPath,beforedays)   
  7.             d=Now-beforedays   
  8.             If Right(IISLogPath,1) <> "/" Then IISLogPath=IISLogPath & "/"   
  9.             p= IISLogPath & "ex" & Right(Year(d),2) & Right("0" & Month(d),2)  & Right("0" & Day(d),2)  & ".Log"  
  10.             Set WshShell = WScript.CreateObject("WScript.Shell")   
  11.             wscript.echo p   
  12.             WshShell.Run ("cmd.exe /c del /s " & p)   
  13.             Set WshShell = Nothing  
  14.         End Function  
  15.   
  16.         DelIISLog "D:/IISLogTest",2   
  17.     </script>   
  18. </job>  

有时我拿到别人的代码时我得写一堆东西来测试,现在这个如果让您去测试的话,您不会直接在服务器上测试吧,所以,以下再贴出本人柳永法的测试脚本,主要是在D盘生成一个测试文件夹,及一些IIS测试日志文件,

IIS日志清理之IIS日志生成系统(CreateIISLog.vbs):

view plaincopy to clipboardprint?
  1. 'IIS日志清理之IIS日志生成系统(CreateIISLog.vbs)  Made by www.yongfa365.com   
  2. '创建文件夹   
  3. Function CreateFolder(Folder)   
  4.     On Error Resume Next  
  5.     Set FSO = CreateObject("Scripting.FileSystemObject")   
  6.     FSO.CreateFolder(Folder)   
  7.     If Err>0 Then  
  8.         Err.Clear  
  9.         CreateFolder = False  
  10.     Else  
  11.         CreateFolder = True  
  12.     End If  
  13. End Function  
  14. '创建文件   
  15. Function CreateFile(FileName, Content)   
  16.     On Error Resume Next  
  17.     Set FSO = CreateObject("Scripting.FileSystemObject")   
  18.     Set fd = FSO.CreateTextFile(FileName, True)   
  19.     fd.WriteLine Content   
  20.     If Err>0 Then  
  21.         Err.Clear  
  22.         CreateFile = False  
  23.     Else  
  24.         CreateFile = True  
  25.     End If  
  26. End Function  
  27.   
  28.   
  29. CreateFolder "D:/IISLogTest"  
  30. CreateFolder "D:/IISLogTest/IISLogs001"  
  31. CreateFolder "D:/IISLogTest/IISLogs002"  
  32. CreateFolder "D:/IISLogTest/IISLogs003"  
  33. for i=1 to 30   
  34.     d=date-i   
  35.     filename="ex" & right(year(d),2) & right("0" & month(d),2) & right("0" & day(d),2) & ".log"  
  36.     CreateFile "D:/IISLogTest/" & filename,Content   
  37.     CreateFile "D:/IISLogTest/IISLogs001/" & filename,Content   
  38.     CreateFile "D:/IISLogTest/IISLogs002/" & filename,Content   
  39.     CreateFile "D:/IISLogTest/IISLogs003/" & filename,Content   
  40. next  


后记:这个方法不仅可以用在IIS日志处理方面,还可以用在处理Serv-U的日志处理,前提条件是Serv-U的日志文件的格式也得设成像IIS日志这样的格式ex071115.log。


引用本页地址:http://www.yongfa365.com/item/DelIISLog.cmd-DelIISLog.vbs-DelIISLog.js-DelIISLog.wsh-yongfa365.html