我刚刚发现IIS无限期地build立了日志,似乎没有任何IIS设置可以自动清除旧的日志文件。 什么是最好的方式来保持我的IIS日志在控制之下,以便他们不填满整个硬盘驱动器?
你将不得不运行一个计划任务来做到这一点。 这是一个应该工作的Powershell脚本。
set-location c:\windows\system32\Logfiles\W3SVC1\ -ErrorAction Stop foreach ($File in get-childitem -include *.log) { if ($File.LastWriteTime -lt (Get-Date).AddDays(-30)) { del $File } }
这应该清除超过30天前最后修改的任何内容。 将第一行中的path更改为存储日志文件的位置。 还要更改-30,然后再保留这些文件。 -30表示您将删除超过30天的任何内容。
如果您不想使用LastWriteTime,则可以查看显示FileInfo对象的不同属性的本文 。
你可以自己酝酿,但我相信有一个聪明的人已经为你写了这个。 检查出IISLogs & IISLogs精简版!
如果您所做的只是删除日志,那么如果不需要,您可以closures日志loggingfunction! 你会保存你的服务器很多的I / O!
那么,如果你想定期清理它们,那你为什么不在IIS中禁用请求日志? 你可能会使用谷歌分析或其他一些服务,我看到很多人这个东东,以避免头痛的IIS日志影响性能和吃掉所有磁盘空间,但这一切都取决于您的要求当然。
我目前正在使用一个非常简单的batch file脚本来执
forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"
我也做了一个计划任务条目来启动它每天,甚至激活该文件夹的文件压缩function:所有这些东西一起解决了我的问题与IIS文件好。
batch file中的开关说明:
如果您正在寻找一个可行的Powershell替代scheme,请参阅其他答案 :有关如何正确减lessIIS LogFiles文件夹的其他build议, 请查看此帖 。
微软在其网站上build议一个脚本 。
下面是我用于我需要的修改版本。
Wscript.Echo "Starting log removal" sLogFolder = "d:\retentiontest" iMaxAge = 30 'in days Set objFSO = CreateObject("Scripting.FileSystemObject") set colFolder = objFSO.GetFolder(sLogFolder) Wscript.Echo "Removing log files from folder: " & colFolder For Each colSubfolder in colFolder.SubFolders Set objFolder = objFSO.GetFolder(colSubfolder.Path) Set colFiles = objFolder.Files For Each objFile in colFiles iFileAge = now-objFile.DateLastModified if iFileAge > (iMaxAge+1) then Wscript.Echo "Removing File: " & objFile.Name objFSO.deletefile objFile, True end if Next Next
请注意,我已经从“DateCreated”更改为“DateLastModified”,因为违反date创build的date可能比上次修改时间晚,可能与复制文件的情况相同。 您可能不想删除最近更新的文件。
然后使用cscript.exe运行它(例如, cscript.exe d:\scripts\logRetentionScript.vbs )。
在服务器上创build一个计划任务。 在操作部分,您需要:
给它每天或每周的时间表。 完成。