Apache log4j: Retención de registros de 3 días con rotación diaria.
En cualquier momento, quiero que mis archivos de registro sean así: mylog.log, mylog.log.1, mylog.log.2, reflejando los registros de hoy, los registros de ayer y los registros del día antes de ayer, respectivamente. Esto debe lograrse a través de Apache log4j/log4j-extras (v1.2.17), a través de código (sin configuración XML).
Sin embargo, el registro inicializado a continuación parece sobrescribir mylog.log todos los días. ¿Qué estoy haciendo mal?
private static Logger fileLogger() {
TimeBasedRollingPolicy trigPolicy = new TimeBasedRollingPolicy();
trigPolicy.setFileNamePattern("mylog.log" + ".%d");
trigPolicy.setActiveFileName("mylog.log" );
trigPolicy.activateOptions();
FixedWindowRollingPolicy rollPolicy = new FixedWindowRollingPolicy();
rollPolicy.setFileNamePattern("mylog.log" + ".%i");
rollPolicy.setActiveFileName("mylog.log" );
rollPolicy.setMaxIndex(3);
rollPolicy.setMinIndex(1);
rollPolicy.activateOptions();
RollingFileAppender appender = new RollingFileAppender();
appender.setFile("./mylog.log");
appender.setLayout(new PatternLayout("[%d{yyyy.MM.dd::HH:mm:ss}] %-5p: %m%n"));
appender.setThreshold(Level.DEBUG);
appender.setAppend(true);
appender.setRollingPolicy(rollPolicy);
appender.setTriggeringPolicy(trigPolicy);
appender.activateOptions();
Logger logger = LogManager.getLogger(Foo.class);
logger.addAppender(appender);
return logger;
}
davy.ai
El problema con el registrador es que no está estableciendo los valores apropiados para el método
setActiveFileName
de los objetosTimeBasedRollingPolicy
yFixedWindowRollingPolicy
. El métodosetActiveFileName
establece el nombre de archivo con el que la política debería comenzar. Por lo tanto, en este caso, las políticas comienzan con el mismo nombre de archivo todos los días, y por eso se sobrescribe el archivo.Para solucionar este problema, puedes modificar los métodos
setActiveFileName
de la siguiente manera:En este registrador modificado, estamos estableciendo el log de ayer como el archivo activo para
TimeBasedRollingPolicy
y el log de anteayer como el archivo activo paraFixedWindowRollingPolicy
. Esto asegurará que el archivo de registro correcto esté activo y que los archivos de registro no se sobrescriban todos los días.