Gdzie mogę skonfigurować log4j w klasie testowej JUnit?


85

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:


51

Te LogManagerokreś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:

  1. Jeśli określisz log4j.defaultInitOverride false, w ogóle nie skonfiguruje log4j.
  2. 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.

  3. Zezwól log4j na skanowanie ścieżki klas w poszukiwaniu pliku konfiguracyjnego log4j podczas testu. (domyślny)

Zobacz także dokumentację online .


Skąd będzie wiedzieć, że to „plik konfiguracyjny log4j”? Jaka jest nazwa pliku? (log4j.xml?)
Czad,

1
@Chad: Zmodyfikowałem swoją odpowiedź, aby odpowiedzieć na Twoje pytanie. Zobacz link do statycznego bloku, aby zobaczyć dokładnie, jak to jest zaimplementowane.
Paul Morie

Używam log4j2 i musiałem użyć następujące ustawienia, aby wskazać plik: -Dlog4j.configurationFile=log4j2.xml. Ponadto, jeśli próbujesz debugowania załadunku / startup, ustawienie to może być użyteczne: -Dlog4j2.debug=true.
Kent

Jest jakiś sposób, aby być bardziej szczegółowym w tej odpowiedzi?
markthegrea

61

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”)


6
W przypadku standardowych testów budowlanych ustawiłbym Log4j na ostrzeżenie lub nawet błąd. Jeśli testy zakończą się sukcesem (również testy negatywne), nie powinno być żadnego logowania, co przyciąga uwagę użytkowników.
keiki

2
Tak, to prawda dla log4j 1.x. Najwyraźniej w przypadku log4j2 możesz użyć bardziej „egzotycznych” plików, takich jak plik log4j2-test.properties ... logging.apache.org/log4j/2.x/manual/configuration.html :)
rogerdpack


5

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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.