Bagaimana cara mengatur IIS untuk memutar log?

21

Saya telah menggunakan Apache selama bertahun-tahun dan saya menerima begitu saja bahwa ia menangani rotasi log untuk saya. Saya telah menggali konfigurasi IIS dan googling, tetapi saya tidak dapat menemukan opsi bagi IIS untuk mengaktifkan rotasi log.

Apa cara yang lebih disukai untuk mengkonfigurasi IIS untuk menghapus log melewati ambang tertentu? Apakah ada produk di luar sana yang melakukan ini untuk Anda? Apa yang dilakukan oleh toko Windows yang giat?

Konfigurasi: IIS 6.0 / Windows Server 2003 32-bit

Elia
sumber
Pertanyaan yang sangat bagus. IIS memang memiliki rotasi, tetapi tidak menangani pembersihan, atau pengarsipan. Saya tidak mengerti mengapa suatu produk, yang begitu matang di area lain, akan kehilangan fitur dasar seperti itu. Dengan konfigurasi default, IIS melakukan bunuh diri dengan mengisi drive root dengan log. (Saya kira hal yang sama dapat dikatakan untuk SQL dan log transaksinya.)
Nathan Hartley

Jawaban:

11

Tidak ada mekanisme bawaan untuk menangani rotasi atau pengarsipan log. Mungkin ada produk pihak ketiga untuk menangani tugas ini atau Anda dapat membuat skrip sesuatu dan mengkonfigurasi tugas yang dijadwalkan. Saya hanya memiliki beberapa server IIS sehingga saya hanya mengatur Tugas berulang di Outlook untuk mengingatkan saya setiap bulan untuk menghapus file log IIS yang lebih lama dari 30 hari.

joeqwerty
sumber
5
Kedengarannya menyakitkan. Coba jadwalkan ini ... Dapatkan-ChildItem E: \ log * -Include ex * .log -Recurse | Where-Object {$ _. LastWriteTime -lt (Get-Date) .AddDays (-30)} | Remove-Item
Nathan Hartley
5

Lihatlah alat IIS Logs ( http://www.iislogs.com/ ). Ada beberapa cara berbeda untuk menginstal ini dan melakukan pekerjaan yang sangat efektif dalam mengelola IIS dan file log lainnya (kompres file ke format .zip, pindahkan ke lokasi yang berbeda, hapus file melewati tanggal tertentu, dll.).

rampok
sumber
1

Atur tugas terjadwal untuk menggunakan robocopy untuk menyalin file ke subdirektori bernama "lama". Ini memiliki saklar, / minage: x yang dapat Anda atur ke 30,60, atau apa pun yang Anda rasakan. Kemudian hapus semua yang ada di direktori itu. Saya melakukannya dengan cara ini pada beberapa lusin server, dan tampaknya melakukan trik.

Chris
sumber
0

Jawaban lainnya bagus, dan menawarkan solusi yang lebih kuat untuk masalah ini. Jika Anda hanya perlu perbaikan cepat, Anda dapat mengatur CCleaner untuk secara otomatis membersihkan folder log Anda setiap kali Anda masuk, atau sesuai jadwal.

Perlu diingat, bahwa ini menghapus semua log, bukan hanya menua file.

Saya mengikuti instruksi ini tetapi menambahkan bahwa saya ingin itu berjalan bahkan ketika pengguna keluar, seperti halnya kasus normal pada server.

Michael Haren
sumber
0

Baru-baru ini saya mengajukan pertanyaan yang sama di forum Powershell.org . Kemudian akhirnya memposting hack Script Resource for Configuration State Desired, yang akan saya gunakan untuk menyelesaikan kebutuhan saya akan rutinitas pembersihan log. Mungkin beberapa kode ini akan bermanfaat bagi orang lain.

# 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
Nathan Hartley
sumber
0

IIS 7 memperkenalkan konfigurasi untuk menghapus file log secara berkala. Untuk informasi lebih lanjut, lihat di periodtautan berikut:

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

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

fernacolo
sumber
1
Saya tidak berpikir fitur ini menghapus file log, hanya menentukan periode untuk pembuatan file log baru, yaitu setiap hari, setiap jam, dll. Dokumen yang Anda tautkan mendefinisikan periode sebagai "Menentukan seberapa sering file log saat ini ditutup dan file log baru dimulai. " Tidak disebutkan tentang penghapusan.
Somantra
0

Anda bisa melakukan ini dengan tugas yang dijadwalkan dan file batch.

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