Я только что обнаружил, что 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.
Расшифровка переключателей в пакетном файле:
Если вы ищете жизнеспособный 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
).
Создайте запланированное задание на сервере. В разделе действий вы хотите:
Составьте ежедневный или еженедельный график. Готово.