Назад | Перейти на главную страницу

Как я могу регулярно очищать файлы журналов IIS?

Я только что обнаружил, что IIS создает журналы на неопределенный срок и, похоже, нет никаких настроек 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 дней назад. Измените путь в первой строке туда, где хранятся ваши файлы журнала. Также измените -30 на сколько времени вы хотите хранить файлы. -30 означает, что вы удалите все, что старше 30 дней.

Вы можете посмотреть на Эта статья который показывает различные свойства объекта FileInfo, если вы не хотите использовать LastWriteTime.

Вы можете сварить собственное, но я думаю, что какой-то умный человек уже написал это для вас. Проверять, выписываться IISLogs & IISLogs Lite!

Если все, что вы делаете, это удаление журналов, вы можете отключить выход, если он не нужен! вы сэкономите своему серверу много операций ввода-вывода!

В настоящее время я делаю это с помощью очень простого сценария пакетного файла:

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: команда для выполнения

Если вы ищете жизнеспособный Powershell альтернатива, см. этот другой ответ: другие предложения о том, как правильно уменьшить папку IIS LogFiles, посмотрите этот пост.

Что ж, если вы хотите регулярно их очищать, почему бы вам не отключить регистрацию запросов в IIS? Вы можете использовать что-то вроде Google Analytics или какой-то другой сервис, я вижу, что многие люди делают это, чтобы избежать головной боли с журналами IIS, влияющими на производительность и съедающими все дисковое пространство, но все это, конечно, зависит от ваших требований.

Microsoft предлагает сценарий на его сайте.

Ниже представлена ​​модифицированная версия, которую я использую для своих нужд.

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", поскольку неожиданно созданная дата может быть позже, чем последняя измененная, как это может быть в случае с скопированными файлами. Вероятно, вы не хотите удалять файлы, которые были недавно обновлены.

Затем запустите его с помощью cscript.exe (например, cscript.exe d:\scripts\logRetentionScript.vbs).

Создайте запланированное задание на сервере. В разделе действий вы хотите:

  • Действие: запустить программу
  • Настройки: Программа = Forfiles
  • Добавить аргументы: -p "C: \ inetpub \ logs \ LogFiles" -s -m . / D -45 / C "cmd / c del @path"
  • Начать в: C: \

Составьте ежедневный или еженедельный график. Готово.