如何保持 IIS 日志文件定期清理?

如何保持 IIS 日志文件定期清理?

我刚刚发现 IIS 会无限期地累积日志,而且似乎没有任何 IIS 设置可以自动清除旧日志文件。有什么最佳方法可以控制我的 IIS 日志,使它们不会填满整个硬盘?

答案1

您必须运行计划任务才能执行此操作。这是一个应该可以使用的 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 天前最后修改的所有内容。将第一行中的路径更改为日志文件的存储位置。同时将 -30 更改为您想要保留文件的时间。-30 表示您将删除 30 天前的所有内容。

你可以看看本文如果您不想使用 LastWriteTime,它会显示 FileInfo 对象的不同属性。

答案2

我目前正在使用一个非常简单的批处理文件脚本执行此操作:

forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"

我还做了一个计划任务每天启动它,甚至激活该文件夹的文件压缩功能:所有这些一起彻底解决了我的 IIS 文件问题。

批处理文件中开关的解释:

  • -s 或 /S :递归到所有子文件夹
  • -p 或 /P :路径
  • -m 或 /M :文件掩码
  • -d 或 /D :天数(-180 = 超过 180 天)
  • -c 或 /C :要执行的命令

如果你正在寻找一个可行的电源外壳另见另一个答案:有关如何正确减少 IIS LogFiles 文件夹的其他建议,查看此帖子

答案3

你可以自己酿造,但我相信一些聪明的人已经为你写好了。看看IIS日志&IISLogs 精简版!

如果您所做的只是删除日志,那么您可以在不需要时关闭日志记录!这将为您的服务器节省大量的 I/O!

答案4

微软建议网站上的脚本

下面是我根据自己的需要使用的修改版本。

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

请注意,我已将“创建日期”更改为“上次修改日期”,因为违反直觉的是,创建日期可能晚于上次修改日期,复制文件的情况也是如此。您可能不想删除最近更新的文件。

然后使用 cscript.exe 运行它(例如cscript.exe d:\scripts\logRetentionScript.vbs)。

相关内容