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

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

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

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

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

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

Проверьте: http://www.808.dk/?code-iis-log-housekeeping

Доступна куча скриптов, которые можно добавить в запланированную задачу = logrotation :)

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

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

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

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

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

Я недавно поставил это тот же вопрос на форуме Powershell.org. Затем я опубликовал хак Script Resource 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

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

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

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

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

forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"