web-dev-qa-db-fra.com

Comment fonctionne vraiment l'attribut max de Log4j2 DefaultRolloverStrategy?

J'ai configuré un RollingRandomAccessFileAppender avec uniquement l'ensemble OnStartupTriggeringPolicy, mais lorsque je mets l'attribut max de DefaultRolloverStrategy à un certain nombre, les journaux continuent de générer au-delà de 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 d'itérateur dans mon modèle de nom?

Est-ce parce que la précision de mon nom de fichier est définie sur secondes?

Est-ce parce que je n'ai que l'ensemble OnStartupTriggeringPolicy?

Ou que se passe-t-il ici?

Mon objectif ici était de mettre en place une configuration continue qui enregistrera les 5 dernières exécutions d'application.

26
Ceiling Gecko

DefaultRolloverStrategy utilisera le modèle de date spécifié dans le filePattern si un TimeBasedTriggeringPolicy est spécifié. Pour utiliser l'attribut max, spécifiez un %i modèle dans le fichier FilePattern et ajoutez <SizeBasedTriggeringPolicy size="20 MB" /> aux politiques de roulement. (Ou une autre taille bien sûr.)

La valeur de max dans <DefaultRolloverStrategy max="5"/> s'assurera alors qu'au cours de la même période de roulement (une seconde pour vous puisque vous avez spécifié un modèle de date de %d{[email protected]}) pas plus de 5 fichiers seront créés lorsqu'un basculement basé sur la taille a été déclenché.

Cela est plus utile si votre fenêtre de survol est plus longue, comme passer chaque jour à un nouveau dossier, et dans ce dossier, assurez-vous que pas plus de 5 fichiers sont créés avec une taille maximale = 20 Mo.


Mise à jour:

Log4j 2.5 a ajouté la possibilité de configurer actions de suppression personnalisées . Hors de la boîte, vous pouvez supprimer des fichiers en fonction de l'âge, du nombre ou de l'espace disque qu'ils occupent (taille de fichier accumulée).

27
Remko Popma