清除IIS日志文件的方法技巧

乐清SEO_搜索优化_ 乐清SEO2021-01-14 转载自:

IIS在运行的过程中日志会不停地增长,若IIS的网站被频繁的调用或不当的调用,则会产生很多日志,我在系统运维的时候曾出现过20G的系统盘,由于合作商开发的程序有问题,每几百微秒调用一次web服务,短期内导致日志膨胀至8~9G,对于系统盘或者磁盘空间不够的服务器来说,IIS日志自动清理则非常有必要。

清除IIS日志文件的方法技巧-马海祥博客

很多使用Windows IIS的站长可能都会遇到这个问题,就是服务器的IIS日志增长经常会导致磁盘空间被占满,而IIS也没有自动删除日志的功能,因此需要经常关注即时清理日志,在此,马海祥就为大家介绍以下几个能够删除IIS日志的方法,在下边的解决方案里请大家可以选择适合自己的。

1、手动清除IIS日志释放空间

维护项目过程中,一次注意到虚拟主机突然死机了,查看了下,C盘只有几十兆大小,进一步查找问题,发现“C:/WINDOWS/system32/LogFiles/W3SVC1/”下有几G的日志文件,网络查询了下,原来是虚拟主机的日志文件常时间得不到清理,占据了磁盘空间,导致程序崩盘。

打开“我的电脑”发现10GB容量的C盘只剩余355MB“可用空间”,已经严重不够用,如下图:

清除IIS日志文件的方法技巧-马海祥博客

如果服务器的管理员并没有在C盘存储大容量文件,而IIS中站点的访问量又非常大,那么C盘的磁盘容量有90%的可能性是被IIS日志记录文件占用了(具体可查看马海祥博客《》的相关介绍)。

IIS存放日志文件的默认存储路径是c:\windows\system32\logfiles,我们依次打开“我的电脑”,C盘,Windows文件夹,system32文件夹,logfiles文件夹,发现里面还有多个子文件夹,每个文件夹都对应一个IIS站点。

我们逐个打开这些文件夹查看,发现里面有大量以.log后缀结尾的文件,这就是IIS日志文件,它们不仅数量多,而且每个文件占用字节数也大,如下图:

清除IIS日志文件的方法技巧-马海祥博客

我们全选这些文件,然后按Shift+DEL强行删除,再打开“我的电脑”,发现C盘“可用空间”由刚才的355MB提升到6.73GB。

清除IIS日志文件的方法技巧-马海祥博客

2、如何不记录IIS日志

如果网站的访问量特别大,管理员觉得每段时间都需要去清除一次IIS日志比较麻烦,那么在IIS的站点中设定可以不记录IIS日志,方法如下:

清除IIS日志文件的方法技巧-马海祥博客

打开“Internet信息服务(IIS)管理器”,选择到不需要记录IIS日志的站点,按下鼠标右键,选择“属性”,在默认的“网站”选项卡中将“启用记录的复选勾”去掉,点“确定”,如下图:

设置完成后,再重启IIS或者服务器,设置即可生效。

3、自动删除IIS日志的程序

这个删除程序的功能很简单,每天自动删除N天前的日志(时间根据情况自己设置,一般设置为30天),可以使用DOS批处理或VBS脚本来实现,总体设计思路是这样的:

IIS日志文件的格式是:ex年月日.log,比如:ex071116.log

IIS日志文件存储位置,默认情况下是在:%windir%\system32\LogFiles,如果您使用的是专业的IIS管理软件,里面一般会让你设置相应日志目录(具体可查看马海祥博客《》的相关介绍)。

IIS日志清理批处理版:跟据当前时间计算出前N天的日期,比如今天是:2015-10-12,前60天的日期就是2015-8-12(程序可以自动识别30天或31天或润月),然后再处理成20150812这样的格式,然后再组合成ex150812.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 '遍历

总之,IIS在运行的过程中日志会不停地增长,若IIS的网站被频繁的调用或不当的调用,则会产生很多日志,对于系统盘或者磁盘空间不够的服务器来说,IIS日志自动清理则非常有必要。

马海祥博客点评:

服务器的一些状况和访问IP的来源都会记录在IIS日志中,所以IIS日志对每个服务器管理者非常的重要,如果入侵者技术比较高明,会删除IIS日志文件以抹去痕迹,这时可以到事件查看器看来自W3SVC的警告信息,往往能找到一些线索,当然,对于访问量特别大的Web服务器,仅靠人工分析几乎是不可能的了!