| 设为主页 | 保存桌面 | 手机版 | 二维码 | 返回首页

深圳高防服务器香港服务器托管

香港服务器托管

新闻分类
  • 暂无分类
联系方式
  • 联系人:王晓
  • 电话:00852-30778831
站内搜索
 
荣誉资质
  • 暂未上传
您当前的位置:首页 » 新闻中心 » IIS日志清理(CMD版,VBS版,JS版,WSH版)
新闻中心
IIS日志清理(CMD版,VBS版,JS版,WSH版)
发布时间:2016-09-29 22:33        浏览次数:30        返回列表

  IIS日志清理(CMD版,VBS版,JS版,WSH版)

  解决方案:不过这不是最终解决方法呀,一个虚拟主机几百个站点呢,有的站点一天就能产生几百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

  ::设置当前日期前多少天或后多少天

  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 amp; set mm=%%b amp; 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

  endlocalamp;set %2=%j%amp;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%)amp;(if %dd% LSS 10 set dd=0%dd%)

  endlocalamp;set %2=%yy%%mm%%dd%amp;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 amp; mid(oFile.name,3,2) amp; - amp; mid(oFile.name,5,2) amp; - amp; 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 '遍历

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

  复制代码 代码如下:

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

  //调用方法:DelIISLog(IIS日志所在路径,保留多少天的IIS日志);

  //遍历IIS日志文件夹下的所有文件及子文件夹下的文件

  function DelIISLog(IISLogPath,KeepDays){

  var fso = new ActiveXObject(scripting.FileSystemObject);

  var f = fso.GetFolder(IISLogPath);

  var Folders = new Enumerator(f.SubFolders); //得到该目录下所有的文件夹的集合

  var Files = new Enumerator(f.Files); //得到该目录下所有的文件的集合

  //第一步处理当前目录下的所有文件

  for (; !Files.atEnd(); Files.moveNext()) {

  var fileName = Files.item().name;

  var year = 20 + fileName.substr(2, 2);

  var mouth = fileName.substr(4, 2);

  var day = fileName.substr(6, 2);

  var days = Math.round(((new Date()).getTime() - Date.UTC(year, mouth - 1, day)) / 1000 / 60 / 60 / 24);

  if (days KeepDays) Files.item().Delete(); //判断是不是要处理的IIS日志文件,如果是的话直接删除

  }

  //第二步处理当前目录下的所有目录,进行递归调用

  for (; !Folders.atEnd(); Folders.moveNext()) {

  DelIISLog(Folders.item(),KeepDays);

  }

  }

  //调用函数,比如:F:\\log,5 或 C:\\windows\\system32\\LogFiles,5

  DelIISLog(D:\\IISLogTest,2);

  文章来源:香港服务器托管 http://www.thinkdream.com/


标题:IIS日志清理(CMD版,VBS版,JS版,WSH版)
本信息网址:http://fuwuqi20.zhanlanku.com/news/itemid-8022.shtml