Patrząc na ostatni napisany przeze mnie przypadek testowy JUnit, wywołałem metodę Log4j BasicConfigurator.configure () wewnątrz konstruktora klasy. To działało dobrze w przypadku uruchamiania tylko tej jednej klasy z polecenia Eclipse „uruchom jako przypadek testowy JUnit”. Ale zdaję sobie sprawę, że to niepoprawne: jestem prawie pewien, że nasz główny zestaw testów uruchamia wszystkie te klasy z jednego procesu, dlatego konfiguracja log4j powinna się odbywać gdzieś wyżej.
Ale nadal muszę czasami uruchamiać samodzielnie przypadek testowy, w takim przypadku chcę skonfigurować log4j. Gdzie należy umieścić wywołanie konfiguracji, aby było uruchamiane, gdy przypadek testowy jest uruchamiany samodzielnie, ale nie, gdy przypadek testowy jest uruchamiany jako część większego zestawu?
Odpowiedzi:
Te
LogManager
określa, które log4j config klasy do wykorzystania w bloku statycznego czyli gdy klasa jest ładowana. Istnieją trzy opcje przeznaczone dla użytkowników końcowych:log4j.defaultInitOverride
false, w ogóle nie skonfiguruje log4j.Określ ręcznie ścieżkę do pliku konfiguracyjnego i zastąp wyszukiwanie ścieżki klas. Lokalizację pliku konfiguracyjnego można określić bezpośrednio, używając następującego argumentu, aby
java
:-Dlog4j.configuration=<path to properties file>
w konfiguracji programu uruchamiającego testy.
Zezwól log4j na skanowanie ścieżki klas w poszukiwaniu pliku konfiguracyjnego log4j podczas testu. (domyślny)
Zobacz także dokumentację online .
źródło
-Dlog4j.configurationFile=log4j2.xml
. Ponadto, jeśli próbujesz debugowania załadunku / startup, ustawienie to może być użyteczne:-Dlog4j2.debug=true
.Generalnie po prostu umieszczam plik log4j.xml w src / test / resources i pozwalam log4j znaleźć go sam: nie jest wymagany żaden kod, domyślna inicjalizacja log4j podniesie go. (I tak zazwyczaj chcę ustawić własne loggery na „DEBUG”)
źródło
Możesz zajrzeć do Simple Logging Facade for Java (SLF4J) . Jest to fasada otaczająca Log4j, która nie wymaga wywołania wstępnej konfiguracji, takiej jak Log4j. Dość łatwo jest również zmienić Log4j na Slf4j, ponieważ różnice w API są minimalne.
źródło
Używam właściwości systemowych w log4j.xml:
... <param name="File" value="${catalina.home}/logs/root.log"/> ...
i rozpocznij testy od:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> <configuration> <systemProperties> <property> <name>catalina.home</name> <value>${project.build.directory}</value> </property> </systemProperties> </configuration> </plugin>
źródło