2010-11-05 19 views
5

Estoy escribiendo una extensión personalizada para una aplicación web Java estándar. La aplicación usa log4j para el registro y me gustaría agregar un nuevo registrador y appender específicamente para mi extensión. El problema es que la aplicación administra el archivo log4j.properties que se genera dinámicamente en función de las selecciones en una interfaz de usuario de la pantalla de administración. Como esta es una aplicación "lista para usar", no puedo modificar el código fuente. Entonces, si agrego mi propio registrador & appender (s) al archivo, se sobrescribe cuando el administrador cambia las preferencias de registro en la UI.¿Se pueden usar varios archivos log4j.properties en la misma aplicación web Tomcat?

¿Es posible obtener log4j para obtener su configuración de 2 archivos? Por ejemplo, me gustaría algo como lo siguiente:

applog.properties #(Dynamically generated from admin UI) 
mylog.properties #(My static properties) 

En este escenario, log4j habría alguna manera de combinar las entradas de los dos archivos para la configuración completa.

¿Esto es posible? o hay otras soluciones?

Respuesta

2

Nunca encontré una manera de "combinar" múltiples archivos log4j.properties, pero sí encontré una solución viable. La configuración de log4j puede manipularse programáticamente en tiempo de ejecución, similar al fragmento de código siguiente. Esto fusionó de manera efectiva mi configuración de log4j personalizada en la configuración definida por el archivo log4j.properties, que en mi caso no pude editar.

// Init custom logging 

// Define layout 
PatternLayout layout = new PatternLayout(); 
layout.setConversionPattern("%d [%-5p] -- %m%n"); 

// Create appender 
RollingFileAppender appender = new RollingFileAppender(); 
appender.setFile(LOG_PATH); 
appender.setMaxFileSize("2MB"); 
appender.setMaxBackupIndex(0); 
appender.setLayout(layout); 
appender.activateOptions(); // It didn't work without this 

// Get our logger and add appender. 
log = Logger.getLogger("[MyCustomLogger]"); 
log.setLevel(YOUR_LOGGING_LEVEL_HERE); 
log.addAppender(appender); 
Cuestiones relacionadas