Spring Boot Test mengabaikan logging.level


91

Salah satu modul maven saya mengabaikan level logging saya saat menjalankan pengujian.

Di src/test/resourcessaya punya 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

Saya juga mencoba application-test.properties.

Aplikasi saya banyak mencatat, terutama saat memuat konteks. Aku mencoba logback.xml, logback-test.xmldan logback-spring.xmltapi tidak ada yang membantu.

Pom saya:

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

Satu kelas Tes sederhana:

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

    @Autowired
    private JobLauncher jobLauncher;

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

}

Log aplikasi dalam Mode DEBUG.

Dan ya, application.propertiesakan dimuat. Saya sudah mencoba membobol aplikasi dengan konfigurasi yang salah.

Terima kasih atas petunjuknya.

Jawaban:


90

Oke apa yang saya lakukan sekarang, di semua modul saya konfigurasikan sebagai berikut:

src / main / resources:
Saya menggunakan konfigurasi logging application.properiesseperti yang logging.level.*dijelaskan dalam pertanyaan.

src / test / resources:
Saya menggunakan logback-test.xmlseperti:

<?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>

Tapi saya masih tidak mengerti, mengapa di beberapa modul saya bisa menggunakan application.properties, tetapi di modul lain ia mengabaikan ... Tapi untuk saat ini berfungsi untuk saya apa adanya.

Tapi mungkin sedikit petunjuk dengan pengetahuan latar belakang masih diterima.

Saya tidak menandai jawaban saya sebagai solusi, karena masih terasa seperti solusi.


7
Asumsi saya adalah yang application.propertiesdiurai lebih lambat dari inisialisasi pengujian. Itulah mengapa org.springframework.testtidak berpengaruh pada logging pengujian awal.
Elnur Abdurrakhimov

masalah yang sama, juga menggunakan logback-test.xml
radistao

3
Ini luar biasa. Saya menambahkan <logger name="org.springframework.boot" level="warn" />dan <logger name="org.eclipse.jetty" level="warn" />benar-benar meminimalkan kebisingan. Jika Anda menggunakan kesombongan, Anda juga bisa menambahkan <logger name="springfox" level="warn" />. Sudah selesai dilakukan dengan baik. Semoga beruntung!
Bohemian

1
Ini membantu, meskipun saya mulai melihat banyak log dari logback itu sendiri setelah saya mencoba menambahkan logback-test.xmlfile. Untuk mematikannya saya mengikuti jawaban utama dari posting StackOverflow ini - dan BAM, saya telah berhasil menyingkirkan semua pencatatan prekursor saat menjalankan tes.
Danny Bullis

1
Permasalahan yang sama. 2 Modul dengan Konfigurasi yang persis sama (kelas dasar). Yang satu melakukan logging selama pembuatan konteks, yang lainnya tidak. Perubahan pada application.properties (logging.level) akan diterapkan. Penggunaan di atas logback-test.xmlberfungsi seperti yang diharapkan. (+1) terima kasih
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>

Sebagai perbaikan cepat, saya memasukkan logback.xmlfile dengan konten di atas src/test/resourcesdan berhasil.


3
Solusi bagus dan bersih. File juga bisa diberi nama "logback-test.xml" dan harus ditempatkan di bawah 'src / test / resources' untuk kejelasan.
Krzysztof Tomaszewski

Ya, kejelasan adalah alasan mengapa saya menamakannyalogback-text.xml
Michael Hegner

apa bedanya jawaban saya?
Michael Hegner

22

Untuk mengaktifkan application.propertieskebutuhan untuk menambahkan anotasi @SpringBootTestke kelas pengujian, baca lebih lanjut di sini .


2
@SpringBootTest adalah untuk pengujian integrasi dan oleh karena itu properti application.properties akan dimuat. Tetapi untuk unit test ini bukanlah jawaban yang benar.
Tobsch

11

Saya juga mencari solusi untuk itu, sementara saya menggunakan solusi berikut:

ini bukan yang terbaik tapi berhasil

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

LoggingSystem: abstraksi umum atas sistem logging.

->

get: Mendeteksi dan mengembalikan sistem logging yang digunakan. Mendukung Logback dan Java Logging

setLogLevel: Menyetel level logging untuk logger tertentu.

Pastikan untuk mengubah tingkat log kembali untuk semua kelas pengujian lainnya.

Semoga bisa membantu Anda, selamat


2
Ini adalah satu-satunya cara saya menghentikan penebangan. Terima kasih
RobOhRob

Ini adalah kode biasa yang perlu diketahui jika Anda harus menguji apa yang dicatat tanpa memiliki banyak file konfigurasi logger.
Xenson

7

Jika pengujian Anda dianotasi, @DataJpaTestAnda dapat menonaktifkan Hibernate SQL log off dengan:

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

Terima kasih Sejauh ini, ini adalah jawaban terbaik. Terima kasih banyak.
Doogle

2

Coba ini:

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

Terima kasih atas balasannya, tetapi keluaran debug masih ada. Mungkin ada lebih banyak lem?
Michael Hegner
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.