24 votes

Comment faire pour que les fichiers journaux de IIS soient nettoyés régulièrement ?

Je viens de découvrir que IIS accumule indéfiniment des journaux et qu'il ne semble pas y avoir de paramètres IIS permettant de nettoyer automatiquement les anciens fichiers journaux. Quelle est la meilleure façon de contrôler mes journaux IIS afin qu'ils ne remplissent pas tout le disque dur ?

0 votes

Voulez-vous garder les anciens dans une archive zip ou les supprimer ?

0 votes

Vous êtes censé gérer vous-même les fichiers journaux.

0 votes

CCLeaner a une option pour nettoyer les fichiers journaux de IIS ! !!

26voto

Warren Blanchet Points 881

Vous devrez exécuter une tâche planifiée pour le faire. Voici un script Powershell qui devrait fonctionner.

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

Cela devrait purger tout ce qui a été modifié pour la dernière fois il y a plus de 30 jours. Modifiez le chemin d'accès de la première ligne pour qu'il corresponde à l'endroit où sont stockés vos fichiers journaux. Modifiez également le paramètre -30 en fonction de la durée pendant laquelle vous souhaitez conserver les fichiers. -30 signifie que vous supprimerez tout ce qui date de plus de 30 jours.

Vous pouvez jeter un coup d'œil à cet article qui montre différentes propriétés pour l'objet FileInfo si vous ne voulez pas utiliser LastWriteTime.

2 votes

Sur Windows Server 2008 R2 (PS 2.0), j'ai dû modifier l'appel Get-ChildItem pour qu'il soit le suivant Get-ChildItem *.* -include *.log

0 votes

@roryWoods vous pouvez aussi utiliser le drapeau -filter

0 votes

J'utilise une version de ce système qui permet également de les zipper au cas où, une fois zippés, ils sont beaucoup plus petits.) Get-ChildItem -Path "D:\logs\www-iis\W3SVC3" -Recurse | Where-Object CreationTime -lt (Get-Date).AddDays(-7) | Move-Item -Destination "D:\logs\www-iis\temp" & "C:\Program Files\7-Zip\7z.exe" a D:\logs\www-iis\log-backup.7z D:\logs\www-iis\temp\* Remove-Item -path D:\logs\www-iis\temp\*

5voto

Darkseal Points 251

Je fais actuellement cela en utilisant un fichier batch très simple script :

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

J'ai aussi fait un Tâche programmée pour le lancer quotidiennement et j'ai même activé la fonction de compression des fichiers sur ce dossier : toutes ces choses ensemble ont réglé mon problème avec les fichiers IIS pour de bon.

Explication des commutations dans le fichier batch :

  • -s ou /S : récursion dans tous les sous-dossiers
  • -p ou /P : chemin
  • -m ou /M : masque de fichier
  • -d ou /D : nombre de jours (-180 = plus de 180 jours)
  • -c ou /C : commande à exécuter

Si vous cherchez une solution viable Powershell alternative, voir cette autre réponse : pour d'autres suggestions sur la façon de réduire correctement le dossier IIS LogFiles, consultez ce post .

3voto

nOw2 Points 276

Vous pouvez faire votre propre recette, mais je pense qu'une personne intelligente l'a déjà écrite pour vous. Regardez IISLogs & IISLogs Lite !

Si tout ce que vous faites est de supprimer les journaux, alors vous pouvez désactiver la journalisation si elle n'est pas nécessaire ! vous économiserez beaucoup d'E/S à votre serveur !

2 votes

Juste une mise à jour, mais IISLogs Lite n'est plus disponible depuis un certain temps, et IISLogs est pas bon marché.

1 votes

Depuis juillet 2021, IISLogs.com est un domaine parqué.

2voto

Zamicol Points 191

Microsoft suggère un script sur son site web .

Vous trouverez ci-dessous une version modifiée que j'utilise pour mes besoins.

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

Notez que j'ai remplacé "DateCreated" par "DateLastModified" car contre-intuitivement la date de création peut être postérieure à la dernière modification, comme cela peut être le cas avec des fichiers copiés. Vous ne voulez probablement pas supprimer les fichiers qui ont été récemment mis à jour.

Exécutez-le ensuite à l'aide de cscript.exe (par exemple, cscript.exe d:\scripts\logRetentionScript.vbs ).

1voto

zby Points 376

Si vous voulez les nettoyer régulièrement, pourquoi ne pas désactiver l'enregistrement des requêtes dans IIS ? Vous pouvez utiliser quelque chose comme google analytics ou un autre service, je vois beaucoup de gens qui font cela pour éviter les maux de tête avec les journaux IIS affectant les performances et mangeant tout l'espace disque mais tout dépend de vos besoins bien sûr.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X