Как настроить IIS для поворота журналов?

21

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

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

Конфигурация: IIS 6.0 / Windows Server 2003 32-разрядная версия

Илия
источник
Очень хороший вопрос В IIS есть ротация, но она не выполняет очистку и архивирование. Я не понимаю, почему продукту, столь зрелому в других областях, не хватает такой базовой функции. В конфигурации по умолчанию IIS совершает самоубийство, заполняя корневой диск журналами. (Полагаю, то же самое можно сказать и о SQL и его журналах транзакций.)
Натан Хартли,

Ответы:

11

Там нет встроенного механизма для обработки журнала ротации или архивирования. Могут быть сторонние продукты, чтобы справиться с этой работой, или вы можете написать что-нибудь и настроить запланированное задание. У меня есть только несколько серверов IIS, поэтому я просто настроил повторяющуюся задачу в Outlook, чтобы ежемесячно напоминать мне об удалении файлов журнала IIS старше 30 дней.

joeqwerty
источник
5
Это звучит больно. Попробуйте запланировать это ... Get-ChildItem E: \ log * -Включить ex * .log -Recurse | Where-Object {$ _. LastWriteTime -lt (Get-Date) .AddDays (-30)} | Удалить предмет
Натан Хартли,
5

Взгляните на инструмент IIS Logs ( http://www.iislogs.com/ ). Есть несколько различных способов установить это и очень эффективно справляться с управлением IIS и другими файлами журналов (сжимать файлы в формате .zip, перемещать их в разные места, удалять файлы после определенной даты и т. Д.).

обкрадывать
источник
1

Установите запланированное задание, чтобы использовать robocopy для копирования файлов в подкаталог с именем «old». У него есть переключатель / minage: x, который вы можете установить на 30,60, или что вы чувствуете. Затем удалите все в этом каталоге. Я делаю это таким образом на паре дюжин серверов, и, похоже, это помогает.

Крис
источник
0

Другие ответы хороши и предлагают более надежное решение этой проблемы. Если вам просто нужно быстрое исправление, вы можете настроить CCleaner для автоматической очистки папки журналов при каждом входе в систему или по расписанию.

Имейте в виду, однако, что это удаляет все журналы, а не только устаревшие файлы.

Я следовал этим инструкциям, но добавил, что хочу, чтобы он работал, даже когда пользователь вышел из системы, как это обычно происходит на сервере.

Майкл Харен
источник
0

Я недавно задал этот же вопрос на форуме Powershell.org . Затем закончилась публикация хака ресурса Script for Desired State Configuration, который я буду использовать, чтобы решить мою потребность в процедуре очистки журнала. Возможно, некоторые из этого кода будут полезны для других.

# Requires an E: drive.

configuration LogDirectory
{
    param (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string[]]$Node
    )
    node $Node
    {
        Script LogDirectoryScript
        {
            GetScript = {
                $result = (Test-Path 'E:\log') -and (schtasks.exe /query /TN Purge_Log_Folder | Select-String Purge_Log_Folder -Quiet)
                return @{
                    GetScript = $GetScript
                    SetScript = $SetScript
                    TestScript = $TestScript
                    Result = $result
                }
            }

            SetScript = {
                Write-Verbose 'Creating log directory.'
                if ( -not (Test-Path 'E:\log')) { 
                    New-Item -ItemType Directory -Path 'E:\log'
                }

                Write-Verbose 'Changing permissions to log directory such that any user can write, but only an administrator can read or modify.'
                $acl = (Get-Item 'E:\log').GetAccessControl('Access')
                $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule('Users','Write', 'Allow')))
                Set-Acl -Path 'E:\log' -AclObject $acl | Out-Host

                Write-Verbose 'Scheduling purge task.'
                $script = 'Get-ChildItem E:\log\* -Include ex*.log -Recurse  | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)} | Remove-Item'
                Set-Content -Path C:\Windows\Purge_Log_Folder.ps1 -Value $script
                $task = 'Powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File C:\Windows\Purge_Log_Folder.ps1'
                SCHTASKS /CREATE /TN Purge_Log_Folder /TR $task /SC DAILY /ST 23:59 /RU SYSTEM /F | Out-Host

                Write-Verbose 'Configuring IIS'
                # Default Log File Settings for Web Sites <logFile>
                # http://www.iis.net/configreference/system.applicationhost/sites/sitedefaults/logfile
                Import-Module WebAdministration
                Set-WebConfigurationProperty '/system.applicationHost/sites/siteDefaults' -name logFile -value @{
                    directory = 'E:\log'
                    localTimeRollover ='true'
                    period = 'Hourly'
                }
            }

            TestScript = {
                (Test-Path 'E:\log') -and (schtasks.exe /query /TN Purge_Log_Folder | Select-String Purge_Log_Folder -Quiet)
            }
        }
    }
} 
LogDirectory
Натан Хартли
источник
0

IIS 7 представляет конфигурацию для периодического удаления файлов журнала. Для получения дополнительной информации смотрите periodв следующих ссылках:

http://www.iis.net/configreference/system.applicationhost/log/centralbinarylogfile

http://www.iis.net/configreference/system.applicationhost/log/centralw3clogfile

fernacolo
источник
1
Я не думаю, что эта функция удаляет файлы журналов, она только указывает период для создания нового файла журнала, то есть ежедневно, ежечасно и т. Д. В документе, который вы связали, период определяется как «Указывает, как часто текущий файл журнала закрывается и новый файл журнала запущен. " Там нет упоминания об удалении.
Сомантра
0

Вы можете сделать это с помощью запланированной задачи и пакетного файла.

forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"
Давин Студер
источник