स्प्रिंग बूट टेस्ट लॉगिंग को अनदेखा करता है


90

मेरे मावेन मॉड्यूल में से एक परीक्षण चलाते समय मेरे लॉगिंग स्तरों की उपेक्षा करता है।

में src/test/resourcesमेरे पास है 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

मैंने भी कोशिश की application-test.properties

मेरा एप्लिकेशन बहुत अधिक लॉग करता है, खासकर जब संदर्भ लोड हो रहा हो। मैंने कोशिश की logback.xml, logback-test.xmlऔर logback-spring.xmlकुछ भी मदद नहीं करता है।

मेरा पोम:

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

एक साधारण टेस्ट क्लास:

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

    @Autowired
    private JobLauncher jobLauncher;

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

}

अनुप्रयोग लॉग DEBUG मोड में है।

और हां, application.propertiesवसीयत लोड की जाएगी। मैंने पहले ही गलत कॉन्फिगरेशन द्वारा एप्लिकेशन को तोड़ने की कोशिश की।

किसी भी संकेत के लिए धन्यवाद।

जवाबों:


89

ठीक है कि मैंने अब क्या किया, सभी मॉड्यूल में मैंने निम्नानुसार कॉन्फ़िगर किया:

src / main / Resources:
मैं लॉगिंग कॉन्फ़िगरेशन का उपयोग करता हूं application.properiesजैसे logging.level.*प्रश्न में वर्णित है।

src / test / Resources:
मैं उपयोग करता हूं 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>

लेकिन मुझे अभी भी समझ में नहीं आया है, कि क्यों कुछ मॉड्यूल में मैं application.properties का उपयोग कर सकता हूं, लेकिन एक अन्य मॉड्यूल में इसे अनदेखा करता है ... लेकिन अभी के लिए यह मेरे लिए काम करता है जैसा कि यह है।

लेकिन शायद पृष्ठभूमि ज्ञान के साथ कुछ संकेत अभी भी स्वागत करते हैं।

मैं अपने जवाब को समाधान के रूप में चिह्नित नहीं करता, क्योंकि यह अभी भी एक समाधान की तरह लगता है।


7
मेरी धारणा यह है कि application.propertiesपरीक्षण आरंभीकरण की तुलना में बाद में पार्स किया जा रहा है। इसलिए org.springframework.testप्रारंभिक परीक्षण लॉगिंग पर इसका कोई प्रभाव नहीं है।
एलेन अब्दुर्रखिमोव

एक ही मुद्दा, लॉगबैक-टेस्ट का उपयोग करना। xml
रेडिस्टाओ

3
यह कमाल का है। मैंने जोड़ा <logger name="org.springframework.boot" level="warn" />और <logger name="org.eclipse.jetty" level="warn" />वास्तव में शोर को कम किया। यदि आप स्वैगर का उपयोग कर रहे हैं, तो आप भी जोड़ सकते हैं <logger name="springfox" level="warn" />। बहुत बढ़िया। एक इनाम है!
बोहेमियन

1
इससे मुझे मदद मिली, हालाँकि मैंने logback-test.xmlफ़ाइल जोड़ने की कोशिश करने के बाद ही लॉगबैक से लॉग का एक गुच्छा देखना शुरू किया । इस StackOverflow पोस्ट से मुख्य उत्तर का पालन करने वालों को बंद करने के लिए - और BAM, मैंने परीक्षण चलाने के दौरान सभी अग्रगण्य लॉगिंग से छुटकारा पाने में कामयाब रहा।
डैनी बुलिस

1
एक ही समस्या है। 2 बिल्कुल समान कॉन्फ़िगरेशन (बेस क्लास) के साथ मॉड्यूल। एक संदर्भ निर्माण के दौरान लॉगिंग है, दूसरा नहीं। Application.properties (logging.level) में परिवर्तन प्रभावी होते हैं। उपरोक्त logback-test.xmlकार्यों का उपयोग उम्मीद के मुताबिक हुआ। (+1) धन्यवाद
टॉरस्टेन

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>

एक तेज़ फ़िक्स के रूप में, मैंने logback.xmlउपरोक्त सामग्री के साथ फ़ाइल डाली src/test/resourcesऔर यह काम करता है।


3
अच्छा, साफ समाधान। फ़ाइल को "logback-test.xml" नाम दिया जा सकता है और इसे स्पष्टता के लिए 'src / test / Resources' के तहत रखा जाना चाहिए।
Krzysztof Tomaszewski

हां, स्पष्टता यही कारण है कि मैंने इसे नाम दिया हैlogback-text.xml
माइकल हेगनर

मेरे उत्तर में क्या अंतर है?
माइकल हेगनर

22

परीक्षण वर्ग में application.propertiesएक एनोटेशन जोड़ने की आवश्यकता को सक्षम करने के लिए @SpringBootTest, यहां और पढ़ें ।


2
@SpringBootTest एकीकरण परीक्षणों के लिए है और इसलिए application.properties लोड किया जाएगा। लेकिन यूनिट परीक्षणों के लिए यह सही उत्तर नहीं है।
टॉब्स

11

मैं भी उस के लिए एक समाधान के लिए देख रहा हूँ, इस बीच मैं निम्नलिखित समाधान का उपयोग कर रहा हूँ:

यह सबसे अच्छा नहीं है, लेकिन यह काम करता है

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

LoggingSystem: लॉगिंग सिस्टम पर एक सामान्य अमूर्तता।

->

get: उपयोग में लॉगिंग सिस्टम का पता लगाएँ और वापस लौटाएँ। लॉगबैक और जावा लॉगिंग का समर्थन करता है

setLogLevel: दिए गए लकड़हारे के लिए लॉगिंग स्तर सेट करता है।

अन्य सभी टेस्ट कक्षाओं के लिए बैक लॉग स्तर बदलना सुनिश्चित करें।

आशा है कि यह आपकी मदद करता है, गुडलक


2
यह एकमात्र तरीका है जिसे मैंने रोकने के लिए लॉगिंग प्राप्त की है। धन्यवाद
RobOhRob

यह एक सामान्य सा कोड होता है, जिसमें आपको यह पता लगाना होता है कि लकड़हारा विन्यास फाइल का एक गुच्छा के बिना आपको क्या परीक्षण करना है।
एक्सेंसन

7

यदि आपके परीक्षणों को एनोटेट किया जाता है @DataJpaTestतो आप हाइबरनेट SQL लॉगिंग को बंद कर सकते हैं:

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

धन्यवाद यह अब तक का सबसे अच्छा जवाब है। अनेक अनेक धन्यवाद।
Doogle

2

इसे इस्तेमाल करे:

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

उत्तर के लिए धन्यवाद, लेकिन डिबग आउटपुट अभी भी वहाँ है। कोई और गोंद शायद?
माइकल हेगनर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.