java - example - log4j2 rollingfile
¿Cómo funciona realmente el atributo max de Log4j2 DefaultRolloverStrategy? (1)
DefaultRolloverStrategy utilizará el patrón de fecha especificado en el filePattern si se especifica una TimeBasedTriggeringPolicy. Para usar el atributo max
, especifique un patrón %i
en filePattern y agregue <SizeBasedTriggeringPolicy size="20 MB" />
a las políticas de transferencia. (O algún otro tamaño, por supuesto).
El valor para max en <DefaultRolloverStrategy max="5"/>
se asegurará de que dentro del mismo período de reinversión (un segundo para usted ya que especificó un patrón de fecha de %d{[email protected]}
) no se crearán más de 5 archivos cuando se active un rollover basado en el tamaño.
Esto es más útil si su ventana de rollover es más larga, como pasar a una nueva carpeta todos los días, y dentro de esa carpeta, asegúrese de que no se creen más de 5 archivos con un tamaño máximo = 20 MB.
Actualizar:
Log4j 2.5 agregó la capacidad de configurar acciones de eliminación personalizadas . Fuera de la caja, puede eliminar los archivos según la edad, el recuento o la cantidad de espacio en disco que ocupan (tamaño de archivo acumulado).
He configurado un RollingRandomAccessFileAppender
solo con el conjunto OnStartupTriggeringPolicy
, pero cuando configuro el atributo max de DefaultRolloverStrategy
en algún número, los registros continúan generándose más allá de esa cantidad de forma indefinida.
Aquí está mi 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>
¿Es porque no tengo un iterador en mi patrón de nombre?
¿Es porque mi precisión de nombre de archivo se establece en segundos?
¿Es porque solo tengo el conjunto OnStartupTriggeringPolicy
?
¿O qué está pasando aquí?
Mi objetivo aquí era configurar una configuración sucesiva que registrará las últimas 5 ejecuciones de la aplicación.