2009-11-10 31 views
18

Utilizo Log4j con RollingFileAppender para crear una rotación de registro en función del tamaño.¿Cómo rotar los archivos de registro en función del tiempo en lugar del tamaño en Log4j?

¿Cómo puedo configurarlo para registrar cada archivo durante una cierta cantidad de tiempo antes de girar?

Por ejemplo, para que cada archivo de registro contenga una hora de registros, rotando en la parte superior de cada hora?

configuro Log4J mediante programación en Java utilizando un objeto Properties (en contraposición a un archivo log4j.properties)

Respuesta

30

Probablemente desee utilizar un DailyRollingFileAppender. Para rodarlas cada hora, por ejemplo, usaría un DatePattern de '.'yyyy-MM-dd-HH. Para un archivo log4j.properties:

log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH 
... 

O para su configuración programática:

DailyRollingFileAppender appender = new DailyRollingFileAppender(); 
appender.setDatePattern("'.'yyyy-MM-dd-HH"); 

Logger root = Logger.getRootLogger(); 
root.addAppender(appender); 

Desafortunadamente, el uso de un DailyRollingFileAppender significa que no se puede limitar el tamaño del archivo - esto podría ser problemático si usted tiene toneladas de registros en el período enrollado dado.

+0

Pero no están allí potenciales problemas de threads? He oído hablar de casos en los que no se puede renovar si otros hilos están registrando. – sproketboy

+0

Se ha observado que DailyRollingFileAppender presenta problemas de sincronización y pérdida de datos. El complemento adicional log4j incluye alternativas que se deben considerar para nuevas implementaciones y que se analizan en la documentación de org.apache.log4j.rolling.RollingFileAppender. – okwap

3

La otra cosa a tener en cuenta con cualquier apilador de archivos rodantes es asegurarse de que solo una JVM acceda a un archivo de registro en particular a la vez. Esto se debe a que log4j almacena en caché el tamaño del archivo de registro por razones de rendimiento, y su "actualización" se volverá inestable si varias JVM acceden a los mismos archivos.

+0

Disculpe, ¿qué quiere decir con "vm"? – DivideByHero

+0

Me refiero a la máquina virtual java. Cada instancia del ejecutable 'java'. –

0

Debe usar el DailyRollingFileAppender. A pesar de su nombre engañoso, puede configurarse en a para ejecutarse en períodos de tiempo configurables de hasta minutos.

3

Además,

log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender 
**log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH** 

La siguiente lista muestra todos los patrones de fecha que han definido por log4j,

Minutely '.'yyyy-MM-dd-HH-mm application.log.2013-02-28-13-54 
Hourly '.'yyyy-MM-dd-HH application.log.2013-02-28-13 
Half-daily '.'yyyy-MM-dd-a application.log.2013-02-28-AM app.log.2013-02-28-PM 
Daily '.'yyyy-MM-dd application.log.2013-02-28 
Weekly '.'yyyy-ww application.log.2013-07 app.log.2013-08 
Monthly '.'yyyy-MM application.log.2013-01 app.log.2013-02 
Cuestiones relacionadas