Come posso configurare IIS per ruotare i log?


21

Ho usato Apache per anni e ho dato per scontato che gestisca la rotazione del registro per me. Ho esaminato la configurazione di IIS e ho cercato su Google, ma non riesco a trovare un'opzione per IIS per attivare la rotazione del registro.

Qual è il modo preferito di configurare IIS per eliminare i log oltre una determinata soglia? Ci sono dei prodotti là fuori che fanno questo per te? Cosa fanno i negozi di Windows enterprisy?

Configurazione: IIS 6.0 / Windows Server 2003 a 32 bit


Un'ottima domanda. IIS ha una rotazione, ma non gestisce l'eliminazione né l'archiviazione. Non capisco perché a un prodotto, così maturo in altre aree, manchi una caratteristica così basilare. Con la configurazione predefinita, IIS si suicida riempiendo l'unità principale con i registri. (Immagino che lo stesso si possa dire per SQL e i suoi registri delle transazioni.)
Nathan Hartley

Risposte:


11

Non esiste un meccanismo integrato per gestire la rotazione o l'archiviazione del registro. Potrebbero esserci prodotti di terze parti per gestire questo lavoro o potresti scrivere qualcosa e configurare un'attività pianificata. Ho solo una manciata di server IIS, quindi ho appena impostato un'attività ricorrente in Outlook per ricordarmi mensilmente di eliminare i file di registro IIS più vecchi di 30 giorni.


5
Sembra doloroso. Prova a programmare questo ... Get-ChildItem E: \ log * -Include ex * .log -Recurse | Where-Object {$ _. LastWriteTime -lt (Get-Date) .AddDays (-30)} | Rimuovi elemento
Nathan Hartley


5

Dai un'occhiata allo strumento IIS Logs ( http://www.iislogs.com/ ). Esistono un paio di modi diversi per installare questo e fa un lavoro molto efficace nella gestione di IIS e altri file di registro (comprimere i file in formato .zip, spostarli in posizioni diverse, eliminare i file oltre una certa data, ecc.).


1

Configurare un'attività pianificata per utilizzare robocopy per copiare i file in una sottodirectory denominata "vecchia". Ha un interruttore, / minage: x che puoi impostare su 30,60, o qualunque cosa tu senta. Quindi eliminare tutto in quella directory. Lo sto facendo in questo modo su un paio di dozzine di server, e sembra fare il trucco.


0

Le altre risposte sono buone e offrono una soluzione più solida a questo problema. Se hai solo bisogno di una soluzione rapida, puoi impostare CCleaner in modo da pulire automaticamente la cartella dei log ogni volta che accedi o in base a una pianificazione.

Tieni presente, tuttavia, che ciò elimina tutti i registri, non solo i file obsoleti.

Ho seguito queste istruzioni ma ho aggiunto che volevo che funzionasse anche quando l'utente era disconnesso, come nel caso normale su un server.


0

Di recente ho posto la stessa domanda sul forum Powershell.org . Quindi ho finito per pubblicare un hack di una risorsa di script per la configurazione dello stato desiderato, che userò per risolvere il mio bisogno di una routine di spurgo dei log. Forse parte di questo codice sarà utile ad altri.

# 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 introduce una configurazione per eliminare periodicamente i file di registro. Per ulteriori informazioni, consultare periodi seguenti collegamenti:

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

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


1
Non credo che questa funzione elimini i file di registro, specifica solo il periodo per la creazione di un nuovo file di registro, ovvero giornaliero, orario, ecc. Il documento che hai collegato definisce il periodo come "Specifica la frequenza di chiusura del file di registro corrente e viene avviato un nuovo file di registro. " Non si fa menzione della cancellazione.
Somantra,

0

È possibile farlo con un'attività pianificata e un file batch.

forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.