2010-11-23 3 views
18

J'utilise log4net RollingFileAppender dans un programme de service Windows écrit en C#. Le nombre et la taille des fichiers dans le répertoire des journaux augmente trop vite, ils ont besoin d'être nettoyés. La configuration est la suivante:Log4Net peut-il supprimer automatiquement les fichiers journaux?

<appender name="Rolling Log" type="log4net.Appender.RollingFileAppender"> 
<file value="..\logs\MyProgram.%cs{instanceName}.log" /> 
<appendToFile value="true" /> 
<rollingStyle value="Composite" /> 
<datePattern value=".yyyy-MM-dd.lo\g" /> 
<maxSizeRollBackups value="10" /> 
<maximumFileSize value="150MB" /> 
<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%-5level] %property{remoteUser} [%threadIdentity] %type{1}.%method - %message%newline%exception" /> 
</layout> 

Je veux seulement garder les 30 jours de grumes. Comment puis-je configurer log4net pour supprimer les journaux automatiquement? Si ce n'est pas disponible via log4net, quelles solutions aurais-je?

Merci d'avance.

Répondre

-1

This devrait fournir de l'aide. Cherchez la section RollingFileAppender

+3

Il utilise déjà RollingFileAppender et il n'y a aucune information dans cette documentation sur si vous pouvez le faire ou non. – steinar

+1

Il n'y a rien à faire. –

8

Voici une autre question à partir d'ici SO qui demande essentiellement la même chose: Log4Net: set Max backup files on RollingFileAppender with rolling Date

Le consensus était que log4net ne supporte pas directement. Une affiche indique qu'elle a été implémentée dans le référentiel de code source de log4net, mais qu'elle n'a pas encore été publiée. Une autre affiche montre du code qu'il utilise pour nettoyer les anciens fichiers périodiquement.

+0

Cette option me semble intéressante car elle semble plus facile que de remplacer RollingFileAppender. Maintenant, je prévois d'ajouter un travail de maintenance de journal, déclenché par un programmateur tel que Quartz.Net. – tonyjy

+1

Je pensais que @jeff avait une très bonne solution dans sa réponse: http://stackoverflow.com/questions/95286/log4net-set-max-backup-files-on-rollingfileappender-with-rolling-date/2916628#2916628 . Essentiellement vérifier au démarrage de l'application pour voir s'il était temps de supprimer un fichier (ou des fichiers) ou non. Si votre application n'est pas en cours d'exécution (c'est-à-dire pas plus de 30 jours à la fois), son approche peut être suffisante. – wageoghe

4

Je suis assez sûr que vous ne pouvez pas faire avec l'appender existant, bien que je ne puisse pas le confirmer.

Cependant, je vois deux options:

  1. Créer votre propre appender, le sous-classement RollingFileAppender (ou, si vous voulez plus de contrôle, sous-classe FileAppender). Ensuite, changez votre fichier de configuration pour utiliser cet appender (modifiez l'élément appender).
  2. Créez un fichier .bat qui supprime les fichiers de plus de x jours (voir: Batch file to delete files older than N days). Créez ensuite une tâche dans Windows (http://support.microsoft.com/kb/308569) qui exécute ce fichier chauve-souris, par exemple. tous les jours.
+1

J'aime mieux la première approche. La deuxième approche semble nécessiter plus de déploiement que mon processus actuel et il n'est pas facile à suivre. – tonyjy

Questions connexes