Як налаштувати IIS для обертання журналів?


21

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

Який бажаний спосіб налаштувати IIS для видалення журналів, що минають певний поріг? Чи є продукти, які роблять це для вас? Що роблять підприємливі магазини Windows?

Конфігурація: 32-бітний IIS 6.0 / Windows Server 2003


Дуже гарне запитання. IIS має обертання, але не обробляє очищення та архівування. Я не розумію, чому продукт, настільки зрілий в інших областях, бракував би такої основної характеристики. З конфігурацією за замовчуванням IIS здійснює самогубство, заповнюючи кореневий диск журналами. (Я думаю, те саме можна сказати і для SQL та журналів транзакцій.)
Натан Хартлі

Відповіді:


11

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


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


5

Погляньте на інструмент журналів IIS ( http://www.iislogs.com/ ). Існує кілька різних способів встановити це і виконує дуже ефективну роботу з управління IIS та іншими файлами журналів (стискати файли у форматі .zip, переміщувати їх у різні місця, видаляти файли за певною датою тощо).


1

Постановка планового завдання використовувати роботокопію для копіювання файлів у підкаталог з назвою "старий". Він має вимикач, / монет: x, який ви можете встановити на 30,60, або все, що відчуваєте. Потім видаліть все в цьому каталозі. Я роблю це таким чином на декількох десятках серверів, і, здається, роблю трюк.


0

Інші відповіді хороші та пропонують більш надійне рішення цієї проблеми. Якщо ви просто потребуєте швидкого виправлення, ви можете налаштувати CCleaner для автоматичного очищення папки журналів кожного разу при вході або за розкладом.

Майте на увазі, що це видаляє всі журнали, а не лише старі файли.

Я дотримувався цих інструкцій, але додав, що хотів, щоб він працював навіть тоді, коли користувач вийшов із системи, як це є звичайним випадком на сервері.


0

Нещодавно я поставив це саме питання на форумі Powershell.org . Тоді в кінцевому підсумку опублікував хак ресурсу сценарію для бажаної конфігурації стану, який я буду використовувати для вирішення моєї потреби в процедурі очищення журналу. Можливо, деякі з цього коду будуть корисні іншим.

# 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


1
Я не думаю, що ця функція видаляє файли журналів, вона лише вказує період створення нового файлу журналу, тобто щодня, погодинно тощо. Документ, з яким ви пов’язували, визначає період як "Вказує, наскільки часто закритий поточний файл журналу та запускається новий файл журналу. " Про видалення не згадується.
Сомантра

0

Це можна зробити за допомогою запланованого завдання та пакетного файлу.

forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.