2010-11-05 6 views
5

Ich schreibe eine benutzerdefinierte Erweiterung für eine Java-Webanwendung von der Stange. Die Anwendung verwendet log4j für die Protokollierung und ich möchte einen neuen Logger und Appender speziell für meine Erweiterung hinzufügen. Das Problem besteht darin, dass die Anwendung die Datei "log4j.properties" verwaltet, die basierend auf Auswahlen in einer Benutzeroberfläche des Verwaltungsbildschirms dynamisch generiert wird. Da dies eine Anwendung "von der Stange" ist, kann ich den Quellcode nicht ändern. Also, wenn ich meine eigenen Logger & Appender (s) zu der Datei hinzufügen, wird es jederzeit überschrieben, wenn ein Administrator die Protokolleinstellungen in der Benutzeroberfläche ändert.Können mehrere log4j.properties-Dateien in derselben Tomcat-Webanwendung verwendet werden?

Ist es möglich, log4j zu bekommen, um seine Konfiguration aus 2 Dateien zu bekommen? Zum Beispiel würde ich so etwas wie das folgende wollen:

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

In diesem Szenario log4j würde irgendwie die Einträge aus den beiden Dateien für die vollständige Konfiguration kombinieren.

Ist das möglich? oder gibt es andere Problemumgehungen?

Antwort

2

Ich habe nie einen Weg gefunden, mehrere log4j.properties Datei zu "fusionieren", aber ich fand eine praktikable Lösung. Die log4j-Konfiguration kann zur Laufzeit programmatisch ähnlich wie das unten stehende Code-Snippet manipuliert werden. Dadurch wurden meine benutzerdefinierten log4j-Einstellungen effektiv in die von der Datei log4j.properties definierte Konfiguration eingefügt, die ich in meinem Fall nicht bearbeiten konnte.

// 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); 
Verwandte Themen