Mit Blick auf den letzten JUnit-Testfall, den ich geschrieben habe, habe ich die BasicConfigurator.configure () -Methode von log4j im Klassenkonstruktor aufgerufen. Das funktionierte gut, wenn nur diese einzelne Klasse mit dem Eclipse-Befehl "Als JUnit-Testfall ausführen" ausgeführt wurde. Aber mir ist klar, dass es falsch ist: Ich bin mir ziemlich sicher, dass unsere Haupttestsuite alle diese Klassen von einem Prozess aus ausführt, und daher sollte die log4j-Konfiguration irgendwo weiter oben erfolgen.
Aber ich muss noch einige Male einen Testfall selbst ausführen. In diesem Fall möchte ich log4j konfigurieren. Wo soll ich den Konfigurationsaufruf platzieren, damit er ausgeführt wird, wenn der Testfall eigenständig ausgeführt wird, aber nicht, wenn der Testfall als Teil einer größeren Suite ausgeführt wird?
Antworten:
Die
LogManager
Klasse bestimmt, welche log4j-Konfiguration in einem statischen Block verwendet werden soll , der beim Laden der Klasse ausgeführt wird. Es gibt drei Optionen für Endbenutzer:log4j.defaultInitOverride
false angeben , wird log4j überhaupt nicht konfiguriert.Geben Sie den Pfad zur Konfigurationsdatei manuell selbst an und überschreiben Sie die Klassenpfadsuche. Sie können den Speicherort der Konfigurationsdatei direkt angeben, indem Sie das folgende Argument verwenden, um
java
:-Dlog4j.configuration=<path to properties file>
in Ihrer Testläufer-Konfiguration.
Lassen Sie log4j während Ihres Tests den Klassenpfad nach einer log4j-Konfigurationsdatei durchsuchen. (der Standard)
Siehe auch die Online-Dokumentation .
quelle
-Dlog4j.configurationFile=log4j2.xml
. Wenn Sie versuchen, das Laden / Starten zu debuggen, kann diese Einstellung hilfreich sein :-Dlog4j2.debug=true
.Im Allgemeinen füge ich einfach eine log4j.xml-Datei in src / test / resources ein und lasse log4j sie selbst finden: Kein Code erforderlich, die Standard-log4j-Initialisierung nimmt sie auf. (Normalerweise möchte ich meine eigenen Logger sowieso auf 'DEBUG' setzen.)
quelle
Vielleicht möchten Sie sich mit Simple Logging Facade für Java (SLF4J) befassen . Es ist eine Fassade, die sich um Log4j dreht und keinen ersten Setup-Aufruf wie Log4j erfordert. Es ist auch ziemlich einfach, Log4j für Slf4j auszutauschen, da die API-Unterschiede minimal sind.
quelle
Ich verwende Systemeigenschaften in log4j.xml:
und starten Sie Tests mit:
quelle