Spring Boot Test bỏ qua logging.level


91

Một trong những mô-đun maven của tôi bỏ qua các cấp độ ghi nhật ký của tôi khi chạy thử nghiệm.

Trong src/test/resourcestôi có 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

Tôi cũng đã thử application-test.properties.

Ứng dụng của tôi ghi rất nhiều nhật ký, đặc biệt là khi tải ngữ cảnh. Tôi đã thử logback.xml, logback-test.xmllogback-spring.xmlkhông có gì giúp ích.

Pom của tôi:

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

Một lớp Kiểm tra đơn giản:

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

    @Autowired
    private JobLauncher jobLauncher;

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

}

Nhật ký ứng dụng đang ở Chế độ GỠ LỖI.

Và có, application.propertiessẽ được tải. Tôi đã cố gắng phá vỡ ứng dụng do cấu hình sai.

Cảm ơn bạn cho bất kỳ gợi ý.

Câu trả lời:


90

Được rồi, những gì tôi đã làm bây giờ, trong tất cả các mô-đun tôi đã định cấu hình như sau:

src / nguồn / main:
Tôi sử dụng cấu hình đăng nhập application.properiesnhư logging.level.*như mô tả trong câu hỏi.

src / test / resources:
Tôi sử dụng logback-test.xmlnhư sau:

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

Nhưng tôi vẫn không hiểu, tại sao trong một vài mô-đun tôi có thể sử dụng application.properties, nhưng trong một mô-đun khác, nó bỏ qua ... Nhưng bây giờ nó hoạt động với tôi như vậy.

Nhưng có lẽ một số gợi ý với kiến ​​thức nền tảng vẫn được hoan nghênh.

Tôi không đánh dấu câu trả lời của mình là giải pháp, vì nó vẫn giống như một cách giải quyết.


7
Giả định của tôi là nó application.propertiesđang được phân tích cú pháp muộn hơn so với lần khởi chạy thử nghiệm. Đó là lý do tại sao org.springframework.testkhông ảnh hưởng đến việc ghi nhật ký thử nghiệm ban đầu.
Elnur Abdurrakhimov

cùng một vấn đề, cũng sử dụng logback-test.xml
radistao

3
Điều này thật tuyệt. Tôi đã thêm <logger name="org.springframework.boot" level="warn" /><logger name="org.eclipse.jetty" level="warn" />để thực sự giảm thiểu tiếng ồn. Nếu bạn đang sử dụng swagger, bạn cũng có thể thêm <logger name="springfox" level="warn" />. Làm tốt. Có tiền thưởng!
Bohemian

1
Điều này đã hữu ích, mặc dù tôi bắt đầu thấy một loạt nhật ký từ chính logback sau khi tôi thử thêm logback-test.xmltệp. Để tắt những điều đó, tôi đã làm theo câu trả lời chính từ bài đăng StackOverflow này - và BAM, tôi đã cố gắng loại bỏ tất cả việc ghi nhật ký tiền thân khi chạy thử nghiệm.
Danny Bullis

1
Cùng một vấn đề. 2 Modul có cấu hình giống hệt nhau (lớp cơ sở). Một người có ghi nhật ký trong quá trình tạo ngữ cảnh, người kia thì không. Các thay đổi trong application.properties (logging.level) có hiệu lực. Sử dụng ở trên logback-test.xmlhoạt động như mong đợi. (+1) cảm ơn
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>

Để khắc phục nhanh chóng, tôi đặt logback.xmltệp có nội dung trên vào src/test/resourcesvà nó hoạt động.


3
Dung dịch sạch đẹp. Tệp cũng có thể được đặt tên là "logback-test.xml" và nên được đặt dưới 'src / test / resources' để rõ ràng.
Krzysztof Tomaszewski

Vâng, rõ ràng là lý do tại sao tôi đặt tên cho nólogback-text.xml
Michael Hegner

sự khác biệt cho câu trả lời của tôi là gì?
Michael Hegner

22

Để kích hoạt application.propertiescần thêm chú thích @SpringBootTestvào lớp kiểm tra, đọc thêm tại đây .


2
@SpringBootTest dành cho các bài kiểm tra tích hợp và do đó ứng dụng.properties sẽ được tải. Nhưng đối với các bài kiểm tra đơn vị thì đây không phải là câu trả lời chính xác.
Tobsch

11

Tôi cũng đang tìm giải pháp cho điều đó, đồng thời tôi đang sử dụng giải pháp sau:

đây không phải là tốt nhất nhưng nó hoạt động

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

LoggingSystem: một sự trừu tượng chung đối với các hệ thống ghi nhật ký.

->

get: Phát hiện và trả lại hệ thống ghi nhật ký đang sử dụng. Hỗ trợ Logback và Java Logging

setLogLevel: Đặt cấp độ ghi nhật ký cho một trình ghi nhật ký nhất định.

Đảm bảo thay đổi mức ghi lại cho tất cả các lớp thử nghiệm khác.

Hy vọng nó sẽ giúp bạn, goodluck


2
Đây là cách duy nhất tôi từng dừng việc ghi nhật ký. Cảm ơn bạn
RobOhRob

Đây là một đoạn mã thông thường cần biết trong trường hợp bạn phải kiểm tra những gì đang được ghi nhật ký mà không có một loạt các tệp cấu hình trình ghi nhật ký.
Xenson

7

Nếu các bài kiểm tra của bạn được chú thích, @DataJpaTestbạn có thể tắt đăng nhập Hibernate SQL bằng:

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

Cảm ơn Đây là câu trả lời tốt nhất cho đến nay. Cảm ơn rất nhiều.
Doogle

2

Thử đi:

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

Cảm ơn bạn đã trả lời, nhưng đầu ra gỡ lỗi vẫn ở đó. Có thể có thêm keo không?
Michael Hegner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.