Jak mogę regularnie czyścić pliki dziennika IIS?


20

Właśnie odkryłem, że IIS buduje logi w nieskończoność i wydaje się, że nie ma żadnych ustawień IIS, które automatycznie wyczyściłyby stare pliki dziennika. Jaki jest najlepszy sposób na kontrolowanie moich dzienników IIS, aby nie zapełniały całego dysku twardego?


chcesz zachować stare w archiwum zip, czy je usunąć?
Jeff Atwood

Oczekuje się, że sam będziesz zarządzał plikami dziennika.
Evan Anderson

CCLeaner ma opcję czyszczenia plików dziennika IIS !!!

Odpowiedzi:


22

Aby to zrobić, musisz uruchomić zaplanowane zadanie. Oto skrypt Powershell, który powinien działać.

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

Powinno to wyczyścić wszystko, co zostało ostatnio zmodyfikowane ponad 30 dni temu. Zmień ścieżkę w pierwszym wierszu na miejsce, w którym przechowywane są pliki dziennika. Zmień także wartość -30 na dowolną długość plików. -30 oznacza, że ​​usuniesz wszystko starsze niż 30 dni.

Możesz zajrzeć do tego artykułu, który pokazuje różne właściwości obiektu FileInfo, jeśli nie chcesz używać LastWriteTime.


1
W systemie Windows Server 2008 R2 (PS 2.0) musiałem zmodyfikować wywołanie Get-ChildItem, aby byłoGet-ChildItem *.* -include *.log
roryWoods

4

Możesz zaparzyć własne, ale wierzę, że jakaś mądra osoba już to dla ciebie napisała. Sprawdź IISLogs i IISLogs Lite!

Jeśli wszystko, co robisz, polega na usuwaniu dzienników, możesz wyłączyć wylogowywanie, jeśli nie jest to konieczne! zaoszczędzisz swojemu serwerowi dużo I / O!


1
Tylko aktualizacja, ale IISLogs Lite nie był dostępny od jakiegoś czasu, a IISLogs nie jest tani.
Bacon Bits

3

Obecnie robię to za pomocą bardzo prostego skryptu pliku wsadowego:

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

Zrobiłem również wpis Zaplanowane zadanie, aby uruchamiać go codziennie, a nawet aktywowałem funkcję kompresji plików w tym folderze: wszystkie te rzeczy razem rozwiązały mój problem z plikami IIS na dobre.

Objaśnienie przełączników w pliku wsadowym:

  • -s lub / S: rekurencja do wszystkich podfolderów
  • -p lub / P: ścieżka
  • -m lub / M: maska ​​pliku
  • -d lub / D: liczba dni (-180 = starsze niż 180 dni)
  • -c lub / C: polecenie do wykonania

Jeśli szukasz realnej alternatywy Powershell , zapoznaj się z inną odpowiedzią : aby uzyskać inne sugestie dotyczące prawidłowego zmniejszenia folderu LogFiles IIS, sprawdź ten post .


2

Cóż, jeśli chcesz je regularnie czyścić, dlaczego nie wyłączysz logowania w IIS? Możesz użyć czegoś takiego jak Google Analytics lub innej usługi, widzę, że wiele osób robi to, aby uniknąć bólu głowy z dziennikami IIS wpływającymi na wydajność i zajmującym całe miejsce na dysku, ale wszystko zależy oczywiście od twoich wymagań.


1

Microsoft sugeruje skrypt na swojej stronie internetowej .

Poniżej znajduje się zmodyfikowana wersja, której używam na własne potrzeby.

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

Zauważ, że zmieniłem z „DateCreated” na „DateLastModified”, ponieważ sprzeczna z intuicją data może być późniejsza niż ostatnia modyfikacja, jak to ma miejsce w przypadku skopiowanych plików. Prawdopodobnie nie chcesz usuwać plików, które zostały ostatnio zaktualizowane.

Następnie uruchom go za pomocą cscript.exe (na przykład cscript.exe d:\scripts\logRetentionScript.vbs).


0

Utwórz zaplanowane zadanie na serwerze. W sekcji działań chcesz:

  • Działanie: Uruchom program
  • Ustawienia: Program = Pliki
  • Dodaj argumenty: -p "C: \ inetpub \ logs \ LogFiles" -s -m . / D -45 / C "cmd / c del @path"
  • Rozpocznij za: C: \

Podaj harmonogram dzienny lub tygodniowy. Gotowy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.