Comment nettoyer régulièrement les fichiers journaux IIS?

20

Je viens de découvrir que IIS crée des journaux indéfiniment et il ne semble pas y avoir de paramètres IIS qui nettoieront automatiquement les anciens fichiers journaux. Quelle est la meilleure façon de garder mes journaux IIS sous contrôle afin qu'ils ne remplissent pas l'intégralité du disque dur?

Luc
la source
voulez-vous conserver les anciens dans une archive zip ou les supprimer?
Jeff Atwood
Vous devez gérer vous-même les fichiers journaux.
Evan Anderson
CCLeaner a une option pour nettoyer les fichiers journaux IIS !!!

Réponses:

22

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 dans la première ligne à l'endroit où vos fichiers journaux sont stockés. Modifiez également la valeur -30 à la durée de conservation des fichiers. -30 signifie que vous supprimerez tout élément datant de plus de 30 jours.

Vous pouvez consulter cet article qui présente différentes propriétés de l'objet FileInfo si vous ne souhaitez pas utiliser LastWriteTime.

squillman
la source
1
Sur Windows Server 2008 R2 (PS 2.0), j'ai dû modifier l'appel Get-ChildItem pour qu'il soitGet-ChildItem *.* -include *.log
roryWoods
4

Vous pouvez préparer le vôtre, mais je crois qu'une personne intelligente a déjà écrit cela pour vous. Découvrez IISLogs et IISLogs Lite!

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

Nick Kavadias
la source
1
Juste une mise à jour, mais IISLogs Lite n'est pas disponible depuis un certain temps et IISLogs n'est pas bon marché.
Bacon Bits
3

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

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

J'ai également créé une entrée de tâche planifiée pour la lancer quotidiennement et j'ai même activé la fonction de compression de fichiers sur ce dossier: toutes ces choses ensemble ont résolu mon problème avec les fichiers IIS pour de bon.

Explication des commutateurs dans le fichier batch:

  • -s ou / S: recurse 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 recherchez une alternative Powershell viable , consultez cette autre réponse : pour d'autres suggestions sur la façon de réduire correctement le dossier IIS LogFiles, consultez cet article .

Darkseal
la source
2

Eh bien, si vous souhaitez les nettoyer régulièrement, pourquoi ne désactivez-vous pas la journalisation des demandes dans IIS? Vous pouvez utiliser quelque chose comme google analytics ou un autre service.Je vois beaucoup de gens le faire pour éviter les maux de tête avec les journaux IIS affectant les performances et consommant tout l'espace disque, mais tout dépend bien sûr de vos besoins.

Mee
la source
1

Microsoft suggère un script sur son site Web .

Voici 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 changé de "DateCreated" à "DateLastModified" car la date créée de manière contre-intuitive peut être postérieure à la dernière modification, comme cela peut être le cas avec les fichiers copiés. Vous ne voulez probablement pas supprimer les fichiers récemment mis à jour.

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

Zamicol
la source
0

Créez une tâche planifiée sur le serveur. Dans la section actions, vous souhaitez:

  • Action: démarrer un programme
  • Paramètres: Programme = Forfiles
  • Ajoutez des arguments: -p "C: \ inetpub \ logs \ LogFiles" -s -m . / D -45 / C "cmd / c del @path"
  • Commencez par: C: \

Donnez-lui un horaire quotidien ou hebdomadaire. Terminé.

Corbett Enders
la source