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

20

Я только что обнаружил, что IIS создает журналы неопределенно долго, и, похоже, нет никаких настроек IIS, которые бы автоматически очищали старые файлы журналов. Каков наилучший способ держать журналы IIS под контролем, чтобы они не заполняли весь жесткий диск?

Люк
источник
Вы хотите сохранить старые в zip-архиве или удалить их?
Джефф Этвуд
Вы должны сами управлять файлами журналов.
Эван Андерсон
CCLeaner имеет возможность очищать файлы журнала IIS !!!

Ответы:

22

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

squillman
источник
1
В Windows Server 2008 R2 (PS 2.0) мне пришлось изменить вызов Get-ChildItem, чтобы он былGet-ChildItem *.* -include *.log
roryWoods
4

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

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

Ник Кавадиас
источник
1
Просто обновление, но IISLogs Lite не был доступен в течение некоторого времени, и IISLogs не дешево.
Беконные биты
3

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

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, ознакомьтесь с этим сообщением .

Darkseal
источник
2

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

Mee
источник
1

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).

Zamicol
источник
0

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

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

Дайте ему ежедневное или еженедельное расписание. Выполнено.

Корбетт Эндерс
источник