Spring Boot Test logging.level'i yok sayıyor


91

Maven modülümden biri, testleri çalıştırırken kayıt seviyelerimi göz ardı ediyor.

In src/test/resourcesI var application.properties:

app.name=bbsng-import-backend
app.description=Import Backend Module for Application
spring.profiles.active=test

# LOGGING
logging.level.root=error
logging.level.org.springframework.core =fatal
logging.level.org.springframework.beans=fatal
logging.level.org.springframework.context=fatal
logging.level.org.springframework.transaction=error
logging.level.org.springframework.test=error
logging.level.org.springframework.web=error
logging.level.org.hibernate=ERROR

Ben de denedim application-test.properties.

Uygulamam, özellikle bağlam yüklenirken çok fazla günlük kaydı tutuyor. Denedim logback.xml, logback-test.xmlve logback-spring.xmlbaşka bir şey olur.

Benim pomum:

<parent>
    <groupId>at.company.bbsng</groupId>
    <artifactId>bbsng-import</artifactId>
    <version>0.1.0-SNAPSHOT</version>
</parent>

<artifactId>bbsng-import-backend</artifactId>
<name>bbsng-import-backend</name>

<properties>
    <start-class>at.company.bbsng.dataimport.ApplicationImportBackend</start-class>
</properties>


<dependencies>

    <!-- APPLICATION ... -->
    <dependency>
        <groupId>at.company.bbsng</groupId>
        <artifactId>bbsng-app-domain</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- SPRING ... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- JAVAX ... -->
       ...

    <!-- COMMONS ... -->
       ...

    <!-- LOMBOK ... -->
       ...

    <!-- DB -->
       ...

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${org.springframework.boot-version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Basit bir Test sınıfı:

@ContextConfiguration(classes = { ApplicationImportBackend.class })
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {

    @Autowired
    private JobLauncher jobLauncher;

    @Test
    public void testSimpleProperties() throws Exception {
        assertNotNull(jobLauncher);
    }

}

Uygulama günlükleri DEBUG Modunda.

Ve evet, application.propertiesyüklenecek. Yanlış yapılandırmayla uygulamayı zaten bozmaya çalıştım.

Herhangi bir ipucu için teşekkür ederim.

Yanıtlar:


90

Tamam şimdi yaptığım şey, yapılandırdığım tüm modüllerde aşağıdaki gibi:

src / main / resources:
Günlük yapılandırmasını soruda anlatıldığı application.properiesgibi kullanıyorum logging.level.*.

src / test / resources: Şu şekilde
kullanıyorum logback-test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="*.myapp" level="error" />
    <logger name="org.springframework.core " level="error" />
    <logger name="org.springframework.beans" level="error" />
    <logger name="org.springframework.context" level="error" />
    <logger name="org.springframework.transaction" level="error" />
    <logger name="org.springframework.web" level="error" />
    <logger name="org.springframework.test" level="error" />
    <logger name="org.hibernate" level="error" />
</configuration>

Ama hala anlamıyorum, neden birkaç modülde application.properties'i kullanabilirim, ama başka bir modülde görmezden geliyor ... Ama şimdilik benim için olduğu gibi çalışıyor.

Ancak, arka plan bilgisine sahip birkaç ipucu yine de kabul edilebilir.

Cevabımı çözüm olarak işaretlemiyorum, çünkü yine de bir çözüm gibi geliyor.


7
Benim varsayımım, application.propertiestestin başlatılmasından sonra ayrıştırılıyor olmasıdır. Bu nedenle org.springframework.test, ilk test günlüğü üzerinde hiçbir etkisi yoktur.
Elnur Abdurrakhimov

aynı sorun, ayrıca logback-test.xml kullanılarak
radistao

3
Bu harika. Gürültüyü ekledim <logger name="org.springframework.boot" level="warn" />ve <logger name="org.eclipse.jetty" level="warn" />gerçekten minimize ettim . Swagger kullanıyorsanız, ayrıca ekleyebilirsiniz <logger name="springfox" level="warn" />. Aferin. Ödül al!
Bohemian

1
Bu yardımcı oldu, ancak logback-test.xmldosyayı eklemeyi denedikten sonra logback'in kendisinden bir grup günlük görmeye başladım . Bunları kapatmak için bu StackOverflow gönderisindeki ana cevabı takip ettim - ve BAM, testleri çalıştırırken tüm öncül kayıtlardan kurtulmayı başardım.
Danny Bullis

1
Aynı sorun. Tamamen aynı Konfigürasyona sahip 2 Modül (temel sınıf). Birinin bağlam oluşturma sırasında günlük kaydı var, diğeri yok. Application.properties dosyasındaki (logging.level) değişiklikler yürürlüğe girer. Yukarıdaki logback-test.xmlçalışmaları beklendiği gibi kullanmak . (+1) teşekkürler
Torsten

27
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="org.springframework" level="INFO"/>
</configuration>

Hızlı bir düzeltme olarak, logback.xmlyukarıdaki içeriğe sahip dosyayı koydum src/test/resourcesve çalışıyor.


3
Güzel, temiz çözüm. Dosya aynı zamanda "logback-test.xml" olarak adlandırılabilir ve netlik açısından "src / test / kaynaklar" altına yerleştirilmelidir.
Krzysztof Tomaszewski

Evet, adını logback-text.xml
koymamın

cevabımın farkı nedir?
Michael Hegner

22

Sınıfı test application.propertiesetmek için bir açıklama ekleme ihtiyacını etkinleştirmek için buradan@SpringBootTest daha fazlasını okuyun .


2
@SpringBootTest entegrasyon testleri içindir ve bu nedenle application.properties yüklenecektir. Ancak birim testleri için bu doğru cevap değildir.
Tobsch

11

Ayrıca buna bir çözüm arıyorum, bu arada aşağıdaki çözümü kullanıyorum:

bu en iyisi değil ama işe yarıyor

@BeforeClass
public static void setErrorLogging() {
   LoggingSystem.get(ClassLoader.getSystemClassLoader()).setLogLevel(Logger.ROOT_LOGGER_NAME, LogLevel.ERROR);
}

LoggingSystem: kayıt sistemleri üzerinde ortak bir soyutlama.

->

get: Kullanımdaki günlük sistemini algılayın ve iade edin. Logback ve Java Logging'i destekler

setLogLevel: Belirli bir kaydedici için günlük düzeyini ayarlar.

Diğer tüm test sınıfları için günlük düzeyini değiştirdiğinizden emin olun.

Umarım sana yardımcı olur, iyi şanslar


2
Bu, günlük kaydını durdurmamın tek yolu. Teşekkürler
RobOhRob

Bu, bir sürü günlükçü yapılandırma dosyası olmadan nelerin günlüğe kaydedildiğini test etmeniz gerektiğinde bilmeniz gereken normal bir koddur.
Xenson

7

Testlerinize açıklama eklenmişse, @DataJpaTestSQL'de Hazırda Beklet oturumunu şu şekilde kapatabilirsiniz:

@DataJpaTest(showSql=false)
public class MyTest {
  ..
}

Teşekkürler Bu açık ara en iyi cevap. Çok teşekkürler.
Doogle

2

Bunu dene:

@ContextConfiguration(classes = ApplicationImportBackend.class, 
    initializers = ConfigFileApplicationContextInitializer.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
    //...
}

Cevabınız için teşekkürler, ancak hata ayıklama çıktısı hala orada. Belki başka yapıştırıcı var mı?
Michael Hegner
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.