web-dev-qa-db-fra.com

Comment puis-je obtenir log4j pour supprimer les anciens fichiers journaux rotatifs?

Comment puis-je obtenir log4j pour supprimer les anciens fichiers journaux rotatifs? Je sais que je peux configurer des travaux automatisés (cron pour UNIX et tâche planifiée pour Windows), mais je le veux multiplateforme et je le veux dans la configuration du journal de notre application en tant que partie de notre application, plutôt que dans un code séparé à l'extérieur dans le système d'exploitation langages de script spécifiques. Notre application n'est pas écrite dans les langages de script OS, et je ne veux pas y faire cette partie.

56
skiphoppy

RollingFileAppender fait cela. Il vous suffit de définir maxBackupIndex sur la valeur la plus élevée pour le fichier de sauvegarde.

51
Jared Oberhaus

Les journaux tournent pour une raison, afin que vous ne conserviez qu'un nombre limité de fichiers journaux. Dans log4j.xml, vous pouvez ajouter ceci à votre nœud:

<param name="MaxBackupIndex" value="20"/>

La valeur indique à log4j.xml de ne conserver que 20 fichiers journaux pivotés. Vous pouvez limiter cela à 5 si vous le souhaitez ou même à 1. Si votre application n'enregistre pas autant de données et que vous disposez de 20 fichiers journaux couvrant les 8 derniers mois, mais que vous n'avez besoin que d'une semaine de journaux, alors je pense que vous besoin de Tweak vos paramètres "MaxBackupIndex" et "MaxFileSize" log4j.xml.

Alternativement, si vous utilisez un fichier de propriétés (au lieu du xml) et souhaitez enregistrer 15 fichiers (par exemple)

log4j.appender.[appenderName].MaxBackupIndex = 15
41
rcarson

Il n'existe aucune valeur par défaut pour contrôler la suppression des anciens fichiers journaux créés par DailyRollingFileAppender. Mais vous pouvez écrire votre propre Appender personnalisé qui supprime les anciens fichiers journaux de la même manière que la définition de maxBackupIndex pour RollingFileAppender.

Instructions simples trouvées ici

De 1 :

Si vous essayez d'utiliser Apache Log4J DailyRollingFileAppender pour un fichier journal quotidien, vous devrez peut-être spécifier le nombre maximal de fichiers à conserver. Tout comme le roulement RollingFileAppender prend en charge maxBackupIndex. Mais la version actuelle de Log4j (Apache log4j 1.2.16) ne fournit aucun mécanisme pour supprimer les anciens fichiers journaux si vous utilisez DailyRollingFileAppender. J'ai essayé de faire de petites modifications dans la version originale de DailyRollingFileAppender pour ajouter la propriété maxBackupIndex. Ainsi, il serait possible de nettoyer les anciens fichiers journaux qui pourraient ne pas être nécessaires pour une utilisation future.
9
user3195649