Log4j'yi bir JUnit test sınıfında nerede yapılandırabilirim?


85

Yazdığım son JUnit test durumuna baktığımda, sınıf yapıcısı içindeki log4j'nin BasicConfigurator.configure () yöntemini çağırdım. Bu, Eclipse'nin "JUnit test durumu olarak çalıştır" komutundan yalnızca o tek sınıfı çalıştırmak için iyi çalıştı. Ancak bunun yanlış olduğunu anlıyorum: Ana test paketimizin tüm bu sınıfları tek bir işlemden çalıştırdığından oldukça eminim ve bu nedenle log4j yapılandırmasının daha yüksek bir yerde olması gerekir.

Ancak yine de bazen kendi kendine bir test durumu çalıştırmam gerekiyor, bu durumda log4j'nin yapılandırılmasını istiyorum. Yapılandırma çağrısını, test çalışması bağımsız olarak çalıştığında çalıştırılması için nereye koymalıyım, ancak test çalışması daha büyük bir paketin parçası olarak çalıştırıldığında değil?


Burada log4j 1.x varsayacağım, 2 değil ...
rogerdpack

Yanıtlar:


51

LogManagerKi Log4j yapılandırma sınıfı belirleyen bir kullanmak için statik blok sınıfı yüklendiğinde çalışır. Son kullanıcılara yönelik üç seçenek vardır:

  1. log4j.defaultInitOverrideYanlış olarak belirtirseniz , log4j'yi hiç yapılandırmayacaktır.
  2. Konfigürasyon dosyasının yolunu kendiniz manuel olarak belirleyin ve sınıf yolu aramasını geçersiz kılın. Aşağıdaki bağımsız değişkeni kullanarak yapılandırma dosyasının konumunu doğrudan belirtebilirsiniz java:

    -Dlog4j.configuration=<path to properties file>

    test çalıştırıcı yapılandırmanızda.

  3. Testiniz sırasında log4j'nin sınıf yolunu bir log4j yapılandırma dosyası için taramasına izin verin. (varsayılan)

Ayrıca çevrimiçi belgelere bakın .


Bunun bir "log4j yapılandırma dosyası" olduğunu nasıl anlayacak? Dosya adı nedir? (log4j.xml?)
Chad

1
@Chad: Sorunuza yanıt vermek için cevabımı düzenledim. Bunun tam olarak nasıl uygulandığını görmek için lütfen statik bloğun bağlantısına bakın.
Paul Morie

Ben log4j2 kullanıyorum ve bir dosya belirtmek için aşağıdaki ayarı kullanmak zorunda kaldı: -Dlog4j.configurationFile=log4j2.xml. Hata ayıklama yükleme çalışıyorsanız Ayrıca / başlatma, bu ayar kullanışlı olabilir: -Dlog4j2.debug=true.
Kent

Bu cevaba biraz daha açık olmanın bir yolu var mı?
markthegrea

61

Genelde bir log4j.xml dosyasını src / test / resources içine koyarım ve log4j'nin kendi kendine bulmasına izin veririm: kod gerekmez, varsayılan log4j başlatması onu alır. (Genelde kendi kaydedicilerimi yine de 'DEBUG' olarak ayarlamak istiyorum)


6
Standart bina testi için Log4j'yi uyarı veya hatta hata olarak ayarlardım. Testler başarılı olursa (ayrıca negatif testler), kullanıcıların dikkatini çeken hiçbir kayıt olmamalıdır.
keiki

2
Evet, log4j 1.x için doğru. Log4j2 için görünüşe göre log4j2-test.properties dosyası gibi daha "egzotik" dosyalar kullanabilirsiniz ... logging.apache.org/log4j/2.x/manual/configuration.html :)
rogerdpack


5

Log4j.xml'de sistem özelliklerini kullanıyorum:

...
<param name="File" value="${catalina.home}/logs/root.log"/>
...

ve şunlarla testlere başlayın:

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.