Comment Log4j2 DefaultRolloverStrategy max attribut vraiment travailler?
J'ai configuré un RollingRandomAccessFileAppender
avec seulement le OnStartupTriggeringPolicy
ensemble, mais quand j'ai mis le max attribut de la DefaultRolloverStrategy
pour un certain nombre, les journaux continuent à produire de passé ce montant indéfiniment.
Voici mon log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingRandomAccessFile
name="RollingRAF"
fileName="logs/app.log"
filePattern="logs/app-%d{[email protected]}.log">
<PatternLayout>
<Pattern>%d %p %c{1.} %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="5"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Logger name="myLogger" level="warn">
<AppenderRef ref="RollingRAF"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Est-ce parce que je n'ai pas un itérateur dans mon modèle de nom?
Est-ce parce que mon nom de fichier précision est définie de secondes?
Est-ce parce que je n'ai que le OnStartupTriggeringPolicy
ensemble?
Ou qu'est-ce qui se passe ici?
Mon but ici était de mettre en place un roulement de configuration qui permettront de connecter les 5 dernières application s'exécute.
Devriez-vous utiliser
Ajout/modification qui ne change pas beaucoup, il continue génère des journaux indéfiniment. Si j'ajoute un itérateur %i et inférieure de la précision à un point où je suis en mesure de générer des 5 journaux avec la même précision, puis il remplace les anciens journaux comme prévu (par exemple, si la précision est définie de minutes et je générer 5 journaux en 1 minute), mais dès que le changement de la date (minute suivante arrive), il permettra de générer plus de 5 journaux. Idéalement, je voulais juste la date dans le nom de fichier pour la commodité de ne pas la fonctionnalité, mais je peux juste omettre la date dans le nom et aller avec une plaine itérateur pour atteindre ce que je veux.
J'ai observé le même comportement et d'accord avec @Plafond-Gecko, le max attribut sur DefaultRolloverStrategy apprently s'applique uniquement à l'itérateur et l'itération itération porte uniquement lorsque le nom de fichier est répété, par conséquent, il ne semble pas possible pour moi d'auto-supprimer les anciens fichiers journaux lorsque les noms sont différents. Néanmoins, il est vraiment étrange que cette fonctionnalité n'existe pas lorsque l'API est donc largelly utilisé pour de nombreuses personnes...
<TimeBasedTriggeringPolicy />
puisque vous utilisez de la date dans le nom du modèle?Ajout/modification qui ne change pas beaucoup, il continue génère des journaux indéfiniment. Si j'ajoute un itérateur %i et inférieure de la précision à un point où je suis en mesure de générer des 5 journaux avec la même précision, puis il remplace les anciens journaux comme prévu (par exemple, si la précision est définie de minutes et je générer 5 journaux en 1 minute), mais dès que le changement de la date (minute suivante arrive), il permettra de générer plus de 5 journaux. Idéalement, je voulais juste la date dans le nom de fichier pour la commodité de ne pas la fonctionnalité, mais je peux juste omettre la date dans le nom et aller avec une plaine itérateur pour atteindre ce que je veux.
J'ai observé le même comportement et d'accord avec @Plafond-Gecko, le max attribut sur DefaultRolloverStrategy apprently s'applique uniquement à l'itérateur et l'itération itération porte uniquement lorsque le nom de fichier est répété, par conséquent, il ne semble pas possible pour moi d'auto-supprimer les anciens fichiers journaux lorsque les noms sont différents. Néanmoins, il est vraiment étrange que cette fonctionnalité n'existe pas lorsque l'API est donc largelly utilisé pour de nombreuses personnes...
OriginalL'auteur Ceiling Gecko | 2014-07-03
Vous devez vous connecter pour publier un commentaire.
La DefaultRolloverStrategy allons utiliser le modèle de date spécifiée dans la filePattern si un TimeBasedTriggeringPolicy est spécifié. Pour utiliser le
max
attribut, spécifiez un%i
motif dans la filePattern, et ajouter<SizeBasedTriggeringPolicy size="20 MB" />
pour le survol des politiques. (Ou une autre taille, bien sûr.)La valeur de max dans
<DefaultRolloverStrategy max="5"/>
s'assurera alors que dans la même période de roulement (une seconde pour vous depuis que vous avez spécifié un modèle de date de%d{[email protected]}
) pas plus de 5 fichiers seront créés lors de l'une basée sur la taille de roulement a été déclenchée.C'est plus utile si votre roulement de fenêtre est plus, comme rouler sur un nouveau dossier chaque jour, et à l'intérieur de ce dossier, s'assurer que pas plus de 5 fichiers sont créés avec la taille maximale=20 MO.
Mise à jour:
Log4j 2.5 ajout de la possibilité de configurer personnalisé supprimer actions. Hors de la boîte, vous pouvez supprimer les fichiers en fonction de l'âge, de nombre ou de la quantité d'espace disque qu'ils prennent (cumul de la taille du fichier).
%i
à la fin du motif et il n'aura alors qu'à regarder la%i
et d'ignorer la date de la reconduction d'un nouveau fichier. J'ai vu dans les docs un modèle de type$${date:[email protected]}
mais il semble qu'il est analogue à la%d
modèle.Pas sûr, si je comprends bien, mais ce que sur l'utilisation d'une très grande période de roulement comme chaque année ou chaque époque
$${date:G}
?Ouais, je le comprends. J'irais même avec juste
"logs/app-%i.log"
modèle, j'ai juste pensé que peut-être il ya une manière que je pourrais serrer dans un timestamp pour la consultation individuelle et de commodité.J'ai utilisé DefaultRolloverStrategy avec SizeBasedTriggeringPolicy que 10 MO. Parfois, je reçois: "Impossible de supprimer le fichier" ou "Impossible de déplacer le fichier" - Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus" qui est liée à rouler les fichiers journaux. Je suis avec Windows. Pourquoi fait-il donc? Comment faire pour éviter cela?
Pouvez-vous demander sur la log4j-user mailing liste pour obtenir l'entrée de l'ensemble de la Log4j2 de la communauté?
OriginalL'auteur Remko Popma