Spring Boot Test ignores logging.level
One of my maven module ignores my logging levels when running tests.
In src/test/resources I have 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
I also tried application-test.properties.
My Application logs a lot, especially when loading context. I tried logback.xml, logback-test.xml and logback-spring.xml but nothing helps.
My pom:
<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>
One simple Test class:
@ContextConfiguration(classes = { ApplicationImportBackend.class })
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
@Autowired
private JobLauncher jobLauncher;
@Test
public void testSimpleProperties() throws Exception {
assertNotNull(jobLauncher);
}
}
Application logs is in DEBUG Mode.
And yes, the application.properties will be loaded. I already tried to break the application by wrong config.
Thank you for any hints.
Okay what I did now, in all modules I configured as follows:
src/main/resources:
I use logging configuration in application.properies like logging.level.* as descrbed in question.
src/test/resources:
I use logback-test.xml like:
<?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>
But I still don't understand, why in few modules I could use application.properties, but in another module it ignores ... But for now it works for me as it is.
But maybe few hints with background knowledge are still welcome.
I dont mark my answer as solution, cos it still feels like a workaround.
To enable application.properties need to add an annotation @SpringBootTest to test class, read more here
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<logger name="org.springframework" level="INFO"/>
</configuration>
As a fast fix, I put logback.xml file with the above content in src/test/resources and it works.
I'm also looking for a solution to that, meanwhile I'm using the following solution:
this isn't the best but it works
@BeforeClass
public static void setErrorLogging() {
LoggingSystem.get(ClassLoader.getSystemClassLoader()).setLogLevel(Logger.ROOT_LOGGER_NAME, LogLevel.ERROR);
}
LoggingSystem
: a common abstraction over logging systems.
->
get
: Detect and return the logging system in use. Supports Logback and Java Logging
setLogLevel
: Sets the logging level for a given logger.
Make sure to change back log level for all other test classes.
Hope it helps you, goodluck
If your tests are annotated with @DataJpaTest you can switch Hibernate SQL logging off with:
@DataJpaTest(showSql=false)
public class MyTest {
..
}
Try this:
@ContextConfiguration(classes = ApplicationImportBackend.class,
initializers = ConfigFileApplicationContextInitializer.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
//...
}
참고URL : https://stackoverflow.com/questions/35232827/spring-boot-test-ignores-logging-level
'Development Tip' 카테고리의 다른 글
SQL 'like' vs '=' performance (0) | 2020.10.21 |
---|---|
Spread load evenly by using ‘H * * * *’ rather than ‘5 * * * *’ (0) | 2020.10.21 |
What is ngDefaultControl in Angular? (0) | 2020.10.21 |
How to remove installed ri and rdoc? (0) | 2020.10.21 |
Problems when trying to load a package in R due to rJava (0) | 2020.10.21 |