2010-11-05 12 views
5

Sto scrivendo un'estensione personalizzata per un'applicazione Web Java standard. L'applicazione utilizza log4j per la registrazione e mi piacerebbe aggiungere un nuovo logger e un appender appositamente per la mia estensione. Il problema è che l'applicazione gestisce il file log4j.properties che viene generato dinamicamente in base alle selezioni in un'interfaccia utente della schermata di amministrazione. Poiché questa è un'applicazione "pronta per l'uso", non posso modificare il codice sorgente. Quindi, se aggiungo il mio logger & appender (s) al file, esso viene sovrascritto ogni volta che un amministratore modifica le preferenze di registrazione nell'interfaccia utente.È possibile utilizzare più file log4j.properties nella stessa app Web Tomcat?

È possibile ottenere log4j per ottenere la sua configurazione da 2 file? Per esempio, io avrei voluto qualcosa di simile al seguente:

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

In questo scenario, log4j avrebbe in qualche modo combinare le voci da entrambi i file per la configurazione completa.

È possibile? o ci sono altri metodi?

risposta

2

Non ho mai trovato un modo per "unire" più file log4j.properties, ma ho trovato una soluzione praticabile. La configurazione di log4j può essere manipolata in modo programmatico in fase di runtime simile allo snippet di codice qui sotto. Ciò ha efficacemente unito le mie impostazioni log4j personalizzate alla configurazione definita dal file log4j.properties, che nel mio caso non ho potuto modificare.

// 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); 
Problemi correlati