Spring Тест загрузки игнорирует logging.level
Один из моих модулей maven игнорирует мои уровни ведения журнала при запуске тестов.
В 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, но ничего не помогает.
Мой 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>
Один простой тестовый класс:
@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.
И да, будут загружены приложения .properties. Я уже пытался разбить приложение на неправильную конфигурацию.
Спасибо за любые подсказки.
Ответы
Ответ 1
Хорошо, что я сделал сейчас, во всех модулях, которые я сконфигурировал следующим образом:
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, но в другом модуле он игнорирует... Но пока это работает для меня как есть.
Но, возможно, мало намеков на знание фона по-прежнему приветствуются.
Я не считаю свой ответ решением, потому что он по-прежнему кажется обходным путем.
Ответ 2
Чтобы включить application.properties, необходимо добавить аннотацию @SpringBootTest для тестирования класса, прочитайте здесь
Ответ 3
<?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, и он работает.
Ответ 4
Я также ищу решение для этого, тем временем я использую следующее решение:
это не самое лучшее, но оно работает
@BeforeClass
public static void setErrorLogging() {
LoggingSystem.get(ClassLoader.getSystemClassLoader()).setLogLevel(Logger.ROOT_LOGGER_NAME, LogLevel.ERROR);
}
LoggingSystem
: общая абстракция по системам регистрации.
- >
get
: Обнаружение и возврат используемой системы ведения журнала. Поддержка журнала и ведение журнала Java
setLogLevel
:
Устанавливает уровень ведения журнала для данного регистратора.
Обязательно измените уровень журналов для всех других тестовых классов.
Надеюсь, это поможет вам, goodluck
Ответ 5
Попробуйте следующее:
@ContextConfiguration(classes = ApplicationImportBackend.class,
initializers = ConfigFileApplicationContextInitializer.class)
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles({ "test" })
public class BatchJobConfigurationTests {
//...
}
Ответ 6
Если ваши тесты аннотируются с помощью @DataJpaTest, вы можете отключить ведение журнала Hibernate SQL с помощью:
@DataJpaTest(showSql=false)
public class MyTest {
..
}