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?

Luke
źródło
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.

squillman
źródło
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!

Nick Kavadias
źródł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 .

Darkseal
źródło
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ń.

Mee
źródło
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).

Zamicol
źródło
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.

Corbett Enders
źródło