Como configuro o IIS para girar logs?

19

Eu tenho usado o Apache há anos e tenho dado como certo que ele lida com a rotação de log para mim. Eu estive vasculhando a configuração do IIS e googling, mas não consigo encontrar uma opção para o IIS ativar a rotação de log.

Qual é a maneira preferida de configurar o IIS para excluir logs após um determinado limite? Existem produtos por aí que fazem isso por você? O que as lojas Windows de grande porte fazem?

Configuração: IIS 6.0 / Windows Server 2003 de 32 bits

    
por Elijah 27.09.2011 / 00:12

8 respostas

10

Não há mecanismo embutido para lidar com a rotação ou o arquivamento de logs. Pode haver produtos de terceiros para lidar com essa tarefa ou você pode criar scripts e configurar uma tarefa agendada. Eu tenho apenas um punhado de servidores IIS, então eu apenas configurei uma Tarefa recorrente no Outlook para me lembrar mensalmente de excluir arquivos de log do IIS com mais de 30 dias.

    
por 27.09.2011 / 01:00
6

Verifique: link

Um monte de scripts estão disponíveis, que você pode adicionar na tarefa agendada = logrotation:)

    
por 27.09.2011 / 01:13
5

Dê uma olhada na ferramenta IIS Logs ( link ). Há algumas maneiras diferentes de instalar isso e faz um trabalho muito eficaz no gerenciamento do IIS e outros arquivos de log (compactar arquivos no formato .zip, movê-los para locais diferentes, excluir arquivos após uma determinada data, etc.).

    
por 27.09.2011 / 01:37
1

Configure uma tarefa agendada para usar o robocopy para copiar os arquivos para um subdiretório chamado "old". Tem um interruptor, / minage: x que você pode definir para 30,60, ou o que você sente. Em seguida, exclua tudo nesse diretório. Eu estou fazendo desta forma em algumas dúzias de servidores, e parece fazer o truque.

    
por 12.07.2013 / 15:25
0

As outras respostas são boas e oferecem uma solução mais robusta para esse problema. Se você só precisa de uma solução rápida, pode configurar o CCleaner para limpar automaticamente sua pasta de registros sempre que fizer login ou em um agendamento.

Lembre-se, no entanto, de que isso exclui os registros all , não apenas os arquivos antigos.

Eu segui estas instruções , mas acrescentou que eu queria que ele fosse executado mesmo quando o usuário estava desconectado, como é o caso normal em um servidor.

    
por 26.01.2012 / 19:00
0

Eu postei recentemente essa mesma pergunta no fórum do Powershell.org . Então acabei postando um hack de um Script Resource para Desired State Configuration, que eu usarei para resolver minha necessidade de uma rotina de limpeza de log. Talvez alguns desses códigos sejam úteis para os outros.

# 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
    
por 10.03.2014 / 20:28
0

O IIS 7 introduz uma configuração para excluir periodicamente arquivos de log. Para mais informações, consulte period nos seguintes links:

link

link

    
por 15.09.2016 / 19:55
0

Você pode fazer isso com uma tarefa agendada e um arquivo em lotes.

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

Tags