2015-10-20 1 views
5

(Pour votre information je l'ai déjà fouillé de nombreux documents dans Internet. J'utilise la tempête 0.10.0 beta1. Le fichier de configuration de log4j2 Storm est worker.xml)Comment supprimer les anciens journaux avec log4j2

Maintenant, J'essaie d'utiliser log4j2.

Je suis à la recherche de la façon de supprimer les anciens journaux, mais je ne peux pas le savoir. Une partie de la configuration est comme ci-dessous. Dans un premier temps, je m'attendais à ce que les fichiers journaux datant de plus de 3 jours soient supprimés.

Mais, en réalité, ce n'est pas le cas. Donc, je me demande s'il existe un moyen de supprimer les anciens journaux ou non.

S'il y a un moyen que je n'ai pas encore attrapé, s'il vous plaît informez-moi.

+0

avez-vous déjà essayé ce qui se passe? Pour autant que je me souvienne, log4j a déjà supprimé des fichiers obsolètes, donc je suppose que log4j2 le sera également. Il suffit de définir votre rolloverstrategy à 2 et modifier la date de votre système pour essayer ceci ... – Marged

+0

@ Marged Merci pour vos commentaires. Même si le projet actuel montre que je ne fonctionne pas, je vais essayer à nouveau. – obanadingyo

Répondre

1

Vous pouvez trouver plus d'informations de fond dans cette entrée JIRA pour log4j:

https://issues.apache.org/jira/browse/LOG4J2-524

Il semble être le cas que l'auto suppression des anciens fichiers journaux ne fonctionne pas lorsque vous utilisez seulement TimeBasedTriggeringPolicy

+0

Merci d'avoir partagé le lien. Enfin, j'ai découvert qu'il n'y a pas moyen de supprimer les vieux logs basés sur le temps jusqu'à maintenant. Selon le dernier commentaire sur ce lien (https://issues.apache.org/jira/browse/LOG4J2-435), les tâches de suppression des anciens journaux basés sur le temps sont en cours.Par conséquent, j'ai décidé d'utiliser la stratégie de roulement basée sur la taille en utilisant l'index,% i, – obanadingyo

4

Depuis la version 2.5, Log4j prend en charge un custom Delete action exécuté à chaque basculement.

Vous pouvez contrôler quels fichiers sont supprimés par une combinaison de:

  1. Nom (correspondant à un glob ou regex)
  2. Age ("supprimer si 14 jours ou plus")
  3. Count (« ne garder que les plus récentes 3 »)
  4. Taille (« conserver uniquement les fichiers les plus récents jusqu'à 500 Mo »)

Les utilisateurs qui ont besoin d'un contrôle encore plus précis sur les fichiers à supprimer peuvent spécifier une condition de script à l'aide d'un langage de script JSR-223 pris en charge.

S'il vous plaît consulter le documentation, il a trois exemples complets qui peuvent être utiles.

Pour votre question, cet extrait devrait fonctionner:

<DefaultRolloverStrategy> 
    <!-- 
     * only files in the log folder, no sub folders 
     * only rolled over log files (name match) 
     * only files that are 4 days old or older 
    --> 
    <Delete basePath="${sys:storm.home}/logs/" maxDepth="1"> 
     <IfFileName glob="*.service.????????" /> 
     <IfLastModified age="4d" /> 
    </Delete> 
    </DefaultRolloverStrategy> 

Enfin, soyez prudent! Il n'y a aucun moyen de récupérer les fichiers supprimés de cette façon. :-)

+0

Existe-t-il une option pour y parvenir via la version Log4j2 2.3? – pna

+1

Non, je ne crains pas. L'action Delete a été ajoutée en 2.5 ... Vous pouvez proposer un correctif backport (idéalement fournir un patch avec des tests unitaires) mais ce ne sera pas un port simple car l'implémentation de Delete utilise beaucoup l'API Java 7 Path ... –