Bagaimana saya bisa menjaga file log IIS dibersihkan secara teratur?

20

Saya baru saja menemukan bahwa IIS membangun log tanpa batas dan tampaknya tidak ada pengaturan IIS yang secara otomatis akan membersihkan file log lama. Apa cara terbaik untuk menjaga log IIS saya terkendali sehingga tidak mengisi seluruh hard drive?

Luke
sumber
Anda ingin menyimpan yang lama di dalam arsip zip, atau menghapusnya?
Jeff Atwood
Anda diharapkan untuk mengelola file log sendiri.
Evan Anderson
CCLeaner memiliki opsi untuk membersihkan File Log IIS !!!

Jawaban:

22

Anda harus menjalankan tugas yang dijadwalkan untuk melakukannya. Inilah skrip Powershell yang seharusnya berfungsi.

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
   }
}

Ini harus membersihkan apa pun yang terakhir dimodifikasi lebih dari 30 hari yang lalu. Ubah jalur di baris pertama ke mana pun file log Anda disimpan. Ubah juga -30 hingga seberapa lama Anda ingin menyimpan file. -30 berarti Anda akan menghapus sesuatu yang lebih lama dari 30 hari.

Anda dapat melihat artikel ini yang memperlihatkan properti berbeda untuk objek FileInfo jika Anda tidak ingin menggunakan LastWriteTime.

squillman
sumber
1
Pada Windows Server 2008 R2 (PS 2.0) saya harus memodifikasi panggilan Get-ChildItem menjadiGet-ChildItem *.* -include *.log
roryWoods
4

Anda dapat membuat sendiri, tetapi saya percaya beberapa orang pintar telah menulis ini untuk Anda. Lihat IISLogs & IISLogs Lite!

Jika semua yang Anda lakukan adalah menghapus log, maka Anda dapat mematikan pencatatan jika tidak diperlukan! Anda akan menghemat banyak I / O server Anda!

Nick Kavadias
sumber
1
Hanya pembaruan, tetapi IISLogs Lite belum tersedia untuk beberapa waktu, dan IISLogs tidak murah.
Bacon Bits
3

Saat ini saya melakukan ini menggunakan skrip file batch yang sangat sederhana:

forfiles -p C:\inetpub\logs\LogFiles\ -s -m *.log -d -180 -c "cmd /C DEL @File"

Saya juga membuat entri Tugas Terjadwal untuk meluncurkannya setiap hari dan bahkan mengaktifkan fitur kompresi file pada folder itu: semua hal ini bersama-sama memperbaiki masalah saya dengan file IIS untuk selamanya.

Penjelasan switch dalam file batch:

  • -s or / S: berulang ke semua subfolder
  • -p atau / P: path
  • -m atau / M: file mask
  • -d atau / D: jumlah hari (-180 = lebih dari 180 hari)
  • -c atau / C: perintah untuk dieksekusi

Jika Anda mencari alternatif Powershell yang layak , lihat jawaban lain ini : untuk saran lain tentang cara mengurangi folder IIS LogFiles dengan benar, lihat pos ini .

Darkseal
sumber
2

Nah, jika Anda ingin membersihkannya secara teratur, mengapa Anda tidak menonaktifkan permintaan login di IIS? Anda dapat menggunakan sesuatu seperti google analytics atau layanan lain, saya melihat banyak orang yang ingin menghindari sakit kepala dengan log IIS yang memengaruhi kinerja dan menghabiskan semua ruang disk tetapi semuanya tergantung pada kebutuhan Anda tentunya.

Mee
sumber
1

Microsoft menyarankan skrip di situs webnya .

Di bawah ini adalah versi modifikasi yang saya gunakan untuk kebutuhan saya.

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

Perhatikan bahwa saya telah berubah dari "DateCreated" menjadi "DateLastModified" karena tanggal yang berlawanan secara intuitif dapat lebih lambat dari yang terakhir diubah, seperti halnya dengan file yang disalin. Anda mungkin tidak ingin menghapus file yang baru saja diperbarui.

Kemudian jalankan dengan menggunakan cscript.exe (misalnya, cscript.exe d:\scripts\logRetentionScript.vbs).

Zamicol
sumber
0

Buat tugas terjadwal di server. Di bagian tindakan, Anda ingin:

  • Tindakan: Mulai Program
  • Pengaturan: Program = Forfile
  • Tambahkan Argumen: -p "C: \ inetpub \ logs \ LogFiles" -s -m . / D -45 / C "cmd / c del @path"
  • Mulai di: C: \

Berikan jadwal harian atau mingguan. Selesai

Corbett Enders
sumber