IIS'yi günlükleri döndürecek şekilde nasıl ayarlarım?


21

Apache'yi yıllardır kullandım ve bunun benim için günlük döndürme işlemini gerçekleştirdiğini kabul ettim. IIS yapılandırması ve googling'i araştırıyorum, ancak IIS'nin günlük döndürmeyi açma seçeneği bulamıyorum.

IIS'yi belirli bir eşiğin ötesindeki günlükleri silmek üzere yapılandırmak için tercih edilen yol nedir? Sizin için bunu yapan herhangi bir ürün var mı? Girişimci Windows dükkanları ne yapar?

Yapılandırma: IIS 6.0 / Windows Server 2003 32-bit


Çok güzel bir soru. IIS rotasyona sahip, ancak temizleme ya da arşivleme işlemlerini gerçekleştirmiyor. Diğer alanlarda bu kadar olgun olan bir ürünün neden bu kadar temel bir özelliği eksik olduğunu anlamıyorum. Varsayılan yapılandırmada IIS, kök sürücüyü günlüklerle doldurarak intihar eder. (Sanırım aynı şey SQL ve işlem kayıtları için de söylenebilir.)
Nathan Hartley

Yanıtlar:


11

Günlük döndürme veya arşivlemeyi işleyen yerleşik bir mekanizma yoktur. Bu işi halletmek için üçüncü taraf ürünler olabilir veya bir şey yazıp zamanlanmış bir görevi yapılandırabilirsiniz. Sadece bir IIS sunucusuna sahibim, bu yüzden 30 günden daha eski IIS günlük dosyalarını silmek için bana aylık hatırlatmak için tekrarlayan bir Görev ayarlamıştım.


5
Kulağa acı verici geliyor. Bunu zamanlamayı deneyin ... Get-ChildItem E: \ log * -Include ex * .log -Recurse | Where-Object {$ _. LastWriteTime -lt (Get-Date) .AddDays (-30)} | Eşya Kaldırma
Nathan Hartley


5

IIS Günlükleri aracına bir göz atın ( http://www.iislogs.com/ ). Bunu kurmanın birkaç farklı yolu vardır ve IIS ve diğer günlük dosyalarını yönetmek için çok etkili bir iş yapar (dosyaları .zip biçimine sıkıştırın, farklı konumlara taşıyın, belirli bir tarihteki dosyaları silin vb.).


1

Dosyaları "old" adlı bir alt dizine kopyalamak için robokopi kullanmak üzere zamanlanmış bir görev ayarlayın. Bir anahtarı vardır, / minaj: x, 30,60 olarak ayarlayabilir veya ne hissediyorsan. Sonra bu dizindeki her şeyi silin. Bir kaç düzine sunucuda bu şekilde yapıyorum ve hile yapıyor gibi görünüyor.


0

Diğer cevaplar iyidir ve bu soruna daha sağlam bir çözüm sunar. Hızlıca bir düzeltmeye ihtiyacınız varsa, her giriş yaptığınızda veya bir zamanlamaya göre günlük klasörünüzü otomatik olarak temizlemek için CCleaner'ı ayarlayabilirsiniz.

Ancak, bunun yalnızca yaşlanmayı değil tüm günlükleri sildiğini unutmayın .

Bu talimatları izledim, ancak sunucudaki normal durum gibi, kullanıcı oturumu kapattığında bile çalışmasını istediğimi ekledi.


0

Geçenlerde bu soruyu Powershell.org forumunda da gönderdim . Ardından, bir günlük temizleme rutinine olan ihtiyacımı çözmek için kullanacağım İstenen Durum Yapılandırması için bir Komut Dosyası Kaynağının bir kesimini yayınlamakla sona erdi. Belki bu kodun bazıları başkaları için faydalı olacaktır.

# 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, günlük dosyalarını düzenli aralıklarla silmek için bir yapılandırma sunar. Daha fazla bilgi periodiçin aşağıdaki bağlantılara bakın:

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

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


1
Bu özelliğin günlük dosyalarını sildiğini sanmıyorum, yalnızca yeni bir günlük dosyasının oluşturulması için süreyi, yani günlük, saatlik vb. yeni bir günlük dosyası başlatıldı. " Silme işleminden söz edilmez.
Somantra

0

Bunu zamanlanmış bir görev ve bir toplu iş dosyası ile yapabilirsiniz.

forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.