Wie kann ich IIS-Protokolldateien regelmäßig bereinigen?

20

Ich habe gerade festgestellt, dass IIS Protokolle auf unbestimmte Zeit erstellt und es anscheinend keine IIS-Einstellungen gibt, mit denen alte Protokolldateien automatisch bereinigt werden. Wie halte ich meine IIS-Protokolle am besten unter Kontrolle, damit sie nicht die gesamte Festplatte ausfüllen?

Luke
quelle
Möchten Sie die alten in einem Zip-Archiv aufbewahren oder löschen?
Jeff Atwood
Sie müssen die Protokolldateien selbst verwalten.
Evan Anderson
CCLeaner bietet eine Option zum Bereinigen von IIS-Protokolldateien !!!

Antworten:

22

Dazu müssen Sie eine geplante Aufgabe ausführen. Hier ist ein Powershell-Skript, das funktionieren sollte.

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

Dies sollte alles löschen, was vor mehr als 30 Tagen zuletzt geändert wurde. Ändern Sie den Pfad in der ersten Zeile dahin, wo Ihre Protokolldateien gespeichert sind. Ändern Sie auch die Einstellung -30 so lange, bis Sie die Dateien behalten möchten. -30 bedeutet, dass Sie alles löschen, was älter als 30 Tage ist.

In diesem Artikel werden verschiedene Eigenschaften für das FileInfo-Objekt aufgeführt, wenn Sie LastWriteTime nicht verwenden möchten.

Squillman
quelle
1
Unter Windows Server 2008 R2 (PS 2.0) hatte ich den Get-ChildItem Aufruf zu ändern zu seinGet-ChildItem *.* -include *.log
roryWoods
4

Sie könnten Ihre eigenen brauen, aber ich glaube, eine kluge Person hat dies bereits für Sie geschrieben. Schauen Sie sich IISLogs & IISLogs Lite an!

Wenn Sie nur die Protokolle löschen, können Sie die Protokollierung deaktivieren, wenn sie nicht benötigt wird! Sie sparen Ihrem Server viel I / O!

Nick Kavadias
quelle
1
Nur ein Update, aber IISLogs Lite ist seit einiger Zeit nicht mehr verfügbar und IISLogs ist nicht billig.
Bacon Bits
3

Ich mache dies derzeit mit einem sehr einfachen Batch-Datei-Skript:

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

Ich habe auch einen Eintrag für geplante Tasks erstellt , um ihn täglich zu starten, und sogar die Dateikomprimierungsfunktion für diesen Ordner aktiviert: All diese Dinge zusammen haben mein Problem mit IIS-Dateien endgültig behoben.

Erläuterung der Schalter in der Batch-Datei:

  • -s oder / S: In alle Unterordner zurückkehren
  • -p oder / P: Pfad
  • -m oder / M: Dateimaske
  • -d oder / D: Anzahl der Tage (-180 = älter als 180 Tage)
  • -c oder / C: auszuführender Befehl

Wenn Sie nach einer praktikablen Powershell- Alternative suchen, lesen Sie die folgende Antwort : Weitere Vorschläge zur ordnungsgemäßen Reduzierung des Ordners "IIS-Protokolldateien" finden Sie in diesem Beitrag .

Darkseal
quelle
2

Wenn Sie sie regelmäßig bereinigen möchten, deaktivieren Sie dann die Anforderungsprotokollierung in IIS. Sie können so etwas wie Google Analytics oder einen anderen Dienst verwenden. Ich sehe, dass viele Leute dies tun, um die Kopfschmerzen mit IIS-Protokollen zu vermeiden, die die Leistung beeinträchtigen und den gesamten Speicherplatz verschlingen, aber es hängt natürlich alles von Ihren Anforderungen ab.

Mee
quelle
1

Microsoft schlägt ein Skript auf seiner Website vor .

Unten ist eine modifizierte Version, die ich für meine Bedürfnisse benutze.

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

Beachten Sie, dass ich von "DateCreated" zu "DateLastModified" gewechselt habe, da das Datum der Erstellung, wie es bei kopierten Dateien der Fall ist, möglicherweise später als zuletzt geändert wurde. Sie möchten wahrscheinlich keine Dateien entfernen, die kürzlich aktualisiert wurden.

Führen Sie es dann mit cscript.exe aus (zum Beispiel cscript.exe d:\scripts\logRetentionScript.vbs).

Zamicol
quelle
0

Erstellen Sie eine geplante Aufgabe auf dem Server. Im Bereich Aktionen möchten Sie:

  • Aktion: Starten Sie ein Programm
  • Einstellungen: Programm = Forfiles
  • Argumente hinzufügen: -p "C: \ inetpub \ logs \ LogFiles" -s -m . / D -45 / C cmd / c del @path
  • Beginnen Sie in: C: \

Geben Sie einen Tages- oder Wochenplan an. Getan.

Corbett Enders
quelle