Mit Hilfe der Klasse Log4jConfigurer ist es möglich, die log4j Konfiguration beim Laden des ApplicationContext zu initialisieren und auch zu konfigurieren.
Der wesentliche Vorteil, der sich an dieser Stelle bietet, ist die Möglichkeit der Berücksichtigung unterschiedlicher Systemvariablen bzw. JVM Parametern, die auf den unterschiedlichen Staginginstanzen zur Verfügung stehen können.
Am einfachsten erklärt sich das Verfahren wie immer an einem konkreten Beispiel. Dafür wird ein einfaches Maven-Projekt aufgesetzt, welches die Dependencies für das Beispiel definiert.
Im wesentlichen sind die Abhängigkeiten auf Spring, sowie log4j und JUnit definiert. Die Versionen entsprechen an dieser Stelle aktuellsten Versionen, die zu diesem Zeitpunkt verfügbar sind.
Die Projektstruktur selbst ist einfach gehalten, da der Test nur die Konfiguration an sich verdeutlichen soll.
Wie zu erkennen ist, befinden sich alle log4j.xxx.xml Konfigurationen unter META-INF/, so dass diese später aus dem Classpath ausgelesen und für die Konfiguration genutzt werden können.
Der wesentliche Teil des Beispiels befindet sich in der application-context.xml, der Definition des Spring Kontextes. Dort findet sich die eigentliche Initialisierung des Log4jConfigurer.
Der Log4jConfigurer wird mit Hilfe der MethodInvokingFactoryBean initial konfiguriert. Diese Bean stellt die Möglichkeit bereit eine Methode (statisch oder auch als Instanzmethode) auszuführen und somit, wie in diesem Beispiel, eine initiale Konfiguration durchzuführen. Die Bean ruft also die statische Methode initLogging der Klasse Log4jConfigurer auf und sorgt mit Hilfe der übergebenen Argumente (arguments) für die Initialisierung von log4j.
Somit wird beim Laden des ApplicationContext bereits die log4j Konfiguration initialisiert und kann mit Hilfe der Umgebungsvariablen für die einzelnen Stages konfiguriert werden.
Ein einfacher Test zeigt die Ausgaben für die unterschiedlichen Loggingkonfigurationen auf der Konsole. Im Detail unterscheiden sich die Konfigurationen nur durch das Level auf dem geloggt werden soll.
Die Ausgabe ist dann, je nach Konfiguration und gesetzter Umgebungsvariable, auf der Konsole zu finden. Ist keine Umgebungsvariable gesetzt, dann wird die lokale Konfiguration geladen und folgende Ausgabe erzeugt:
Wird die Umgebungsvariable in den Run-Configurations gesetzt, kann eine andere Konfiguration geladen werden.
Nach der erneuten Durchführung des Unit-Tests werden die Ergebnisse sichtbar.
Keine Kommentare:
Kommentar veröffentlichen