IIS'nin günlükleri süresiz olarak oluşturduğunu ve eski günlük dosyalarını otomatik olarak temizleyecek herhangi bir IIS ayarı görünmediğini keşfettim. Tüm sabit sürücüyü doldurmamak için IIS günlüklerimi kontrol altında tutmanın en iyi yolu nedir?
IIS'nin günlükleri süresiz olarak oluşturduğunu ve eski günlük dosyalarını otomatik olarak temizleyecek herhangi bir IIS ayarı görünmediğini keşfettim. Tüm sabit sürücüyü doldurmamak için IIS günlüklerimi kontrol altında tutmanın en iyi yolu nedir?
Yanıtlar:
Bunu yapmak için zamanlanmış bir görev çalıştırmanız gerekir. İşte çalışması gereken bir Powershell betiği.
set-location c:\windows\system32\Logfiles\W3SVC1\ -ErrorAction Stop
foreach ($File in get-childitem -include *.log) {
if ($File.LastWriteTime -lt (Get-Date).AddDays(-30)) {
del $File
}
}
Bu, en son 30 gün önce değiştirilmiş olan her şeyi temizlemelidir. İlk satırdaki yolu günlük dosyalarınızın depolandığı yere değiştirin. Ayrıca -30'u dosyaları saklamak istediğiniz kadar uzun olarak değiştirin. -30, 30 günden daha eski bir şeyi sileceğiniz anlamına gelir.
LastWriteTime kullanmak istemiyorsanız, FileInfo nesnesi için farklı özellikler gösteren bu makaleye göz atabilirsiniz.
Get-ChildItem *.* -include *.log
Kendinizi hazırlayabilirsiniz, ancak bazı akıllı kişilerin bunu sizin için zaten yazdığına inanıyorum. IISLogs ve IISLogs Lite'a göz atın !
Tüm yaptıklarınız günlükleri siliyorsa, gerekli değilse günlük kaydını kapatabilirsiniz! Sunucunuzu bir çok G / Ç kaydedeceksiniz!
Şu anda bunu çok basit bir toplu iş dosyası komut dosyası kullanarak yapıyorum:
forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"
Ayrıca günlük olarak başlatmak için bir Zamanlanmış Görev girişi yaptım ve hatta bu klasördeki dosya sıkıştırma özelliğini etkinleştirdim: tüm bunlar birlikte IIS dosyalarıyla ilgili sorunumu düzeltti.
Toplu iş dosyasındaki anahtarların açıklaması:
Geçerli bir Powershell alternatifi arıyorsanız , şu diğer yanıta bakın : IIS LogFiles klasörünün düzgün bir şekilde nasıl azaltılacağı ile ilgili diğer öneriler için bu gönderiye göz atın .
Peki, düzenli olarak temizlemek istiyorsanız, neden IIS'de istek günlüğünü devre dışı bırakmıyorsunuz? Google analytics veya başka bir hizmet gibi bir şey kullanabilirsiniz, performansı etkileyen ve tüm disk alanını yiyen IIS günlükleri ile baş ağrısını önlemek için birçok insan bunu dong görüyorum, ancak hepsi elbette gereksinimlerinize bağlı.
Microsoft, web sitesinde bir komut dosyası önerir .
Aşağıda, ihtiyaçlarım için kullandığım değiştirilmiş bir sürüm var.
Wscript.Echo "Starting log removal"
sLogFolder = "d:\retentiontest"
iMaxAge = 30 'in days
Set objFSO = CreateObject("Scripting.FileSystemObject")
set colFolder = objFSO.GetFolder(sLogFolder)
Wscript.Echo "Removing log files from folder: " & colFolder
For Each colSubfolder in colFolder.SubFolders
Set objFolder = objFSO.GetFolder(colSubfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
iFileAge = now-objFile.DateLastModified
if iFileAge > (iMaxAge+1) then
Wscript.Echo "Removing File: " & objFile.Name
objFSO.deletefile objFile, True
end if
Next
Next
Mantıksız olarak oluşturulan tarih, kopyalanan dosyalarda olduğu gibi son değiştirilenden daha geç bir tarih olabileceğinden, "DateCreated" değerinden "DateLastModified" olarak değiştirdiğimi unutmayın. Muhtemelen yakın zamanda güncellenen dosyaları kaldırmak istemezsiniz.
Sonra cscript.exe (örneğin cscript.exe d:\scripts\logRetentionScript.vbs
) kullanarak çalıştırın .
Sunucuda zamanlanmış bir görev oluşturun. İşlemler bölümünde şunları yapabilirsiniz:
Günlük veya haftalık bir program verin. Bitti.