Уровни журнала при тестировании с помощью Spring Boot

Spring Boot

1. Обзор

В этом уроке я покажу вам: как установить уровень журнала загрузки Spring во время тестирования. Хотя мы можем игнорировать журналы при прохождении тестов, важно выбрать правильный уровень журнала, если нам нужно диагностировать неудачные тесты.

2. Важность уровней логирования

Правильная установка уровня журнала может сэкономить нам много времени. Например, если тест не проходит на сервере CI, но проходит на сервере разработки. Мы не сможем диагностировать неудачные тесты, если не будет достаточно выходных данных журнала. Чтобы получить правильное количество деталей, мы можем точно настроить уровень журнала приложения, и если мы обнаружим, что определенный пакет Java более важен для наших тестов, мы можем задать ему более низкий уровень журнала, например DEBUG. Точно так же, чтобы избежать слишком большого шума в журналах, мы можем настроить более высокие уровни журнала, такие как INFO или ERROR, для менее важных пакетов. Давайте рассмотрим различные способы установки уровня журнала!

3. Настройки журнала в application.properties

Если мы хотим изменить уровень журнала в тесте, мы можем сделать это вsrc/test/resources/application.propertiesУстановить свойства:

logging.level.com.baeldung.testloglevel=DEBUG

Это свойство будет указанным пакетомcom.baeldung.testloglevelУстановите уровень журнала. Точно так же мы можем установитьrootуровень журнала, изменить уровень журнала для всех пакетов

logging.level.root=INFO

Теперь попробуйте настроить параметры ведения журнала, добавив конечную точку REST для записи в журнал.

@RestController
public class TestLogLevelController {
 
    private static final Logger LOG = LoggerFactory.getLogger(TestLogLevelController.class);
 
    @Autowired
    private OtherComponent otherComponent;
 
    @GetMapping("/testLogLevel")
    public String testLogLevel() {
        LOG.trace("This is a TRACE log");
        LOG.debug("This is a DEBUG log");
        LOG.info("This is an INFO log");
        LOG.error("This is an ERROR log");
 
        otherComponent.processData();
 
        return "Added some log output to console...";
    }
 
}

Как и ожидалось, если мы вызовем эту конечную точку в нашем тесте, мы увидимTestLogLevelControllerжурнал отладки.

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

Задать уровень лога таким способом очень просто, если в тесте используется@SpringBootTestаннотацию, то мы обязательно должны это сделать. Однако, если эта аннотация не используется, уровень журнала необходимо настроить по-другому.

3.1 Настройки журнала на основе профиля

несмотря на то, что вставил конфигsrc\test\application.propertiesВ большинстве сценариев работает нормально, но в некоторых случаях нам может потребоваться установить другую конфигурацию для теста или набора тестов. В этом случае мы можем использовать@ActiveProfilesАннотация для добавления тестаSpring Profile:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestLogLevelApplication.class)
@EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class)
@ActiveProfiles("logging-test")
public class TestLogLevelWithProfileIntegrationTest {
 
    // ...
 
}

настройки журнала будут существоватьsrc/test/resourcesв каталогеapplication-logging-test.propertiesсередина:

logging.level.com.baeldung.testloglevel=TRACE
logging.level.root=ERROR

Если вызывается с описанными настройкамиTestLogLevelCcontroller, вы увидите напечатанное в контроллереTRACElevel log и не будет видеть журналы выше уровня INFO для других пакетов.

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

4. Настройте логбэк

Если вы используете Spring Boot по умолчаниюLogback, допустимыйsrc/test/resourcesв каталогеlogback-text.xmlУстановите уровень журнала в файле:

<configuration>
    <include resource="/org/springframework/boot/logging/logback/base.xml"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <root level="error">
        <appender-ref ref="STDOUT"/>
    </root>
    <logger name="com.baeldung.testloglevel" level="debug"/>
</configuration>

В приведенном выше примере показано, как настроить уровень журнала для Logback в тесте. Уровень корневого журнала установлен на INFO,com.baeldung.testloglevelУровень журнала пакета установлен на DEBUG. Снова посмотрите на вывод журнала после отправки вышеуказанной конфигурации.

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

4.1 Настройка входа в систему на основе профиля

Другой способ настроить указанный файл профиля — этоapplication.propertiesустановить в файлlogging.configАтрибуты:

logging.config=classpath:logback-testloglevel.xml

Или, если вы хотите иметь только одну конфигурацию Logback в пути к классам, вы можетеlogbacl.xmlиспользоватьspringProfileАтрибуты.

<configuration>
    <include resource="/org/springframework/boot/logging/logback/base.xml"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>
    <root level="error">
        <appender-ref ref="STDOUT"/>
    </root>
    <springProfile name="logback-test1">
        <logger name="com.baeldung.testloglevel" level="info"/>
    </springProfile>
    <springProfile name="logback-test2">
        <logger name="com.baeldung.testloglevel" level="trace"/>
    </springProfile>
</configuration>

используй сейчасlogback-test1вызов конфигурационного файлаTestLogLevelController, вы получите следующий вывод:

2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

С другой стороны, если вы измените конфигурацию наlogback-test2, вывод станет следующим:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

5. Дополнительный Log4J

Кроме того, если мы используемLog4J2, мы можемsrc\main\resourcesв каталогеlog4j2-spring.xmlУровень журнала настраивается в файле.

<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
 
    <Loggers>
        <Logger name="com.baeldung.testloglevel" level="debug" />
 
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

мы можем пройтиapplication.propertiesсерединаlogging.configсвойство, чтобы указать путь к конфигурации Log4J.

logging.config=classpath:log4j-testloglevel.xml

Наконец, посмотрите на вывод после использования приведенной выше конфигурации:

2019-04-01 14:08:27.545 DEBUG 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is a DEBUG log
2019-04-01 14:08:27.545  INFO 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an INFO log
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.testloglevel.TestLogLevelController  : This is an ERROR log
2019-04-01 14:08:27.546  INFO 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an INFO log from another package
2019-04-01 14:08:27.546 ERROR 56585 --- [nio-8080-exec-1] c.b.component.OtherComponent  : This is an ERROR log from another package

6. Заключение

В этой статье мы узнали, как устанавливать уровни журналов, когда Spring Boot тестирует приложение, и изучили множество различных способов его настройки. существуетSpring Bootиспользуется в приложенииapplication.propertiesУстановить уровень журнала проще всего, особенно когда мы используем аннотацию @SpringBootTest. Как всегда, исходный код этих примеров находится вGitHubначальство.

Оригинальная ссылка:Woohoo.Принеси арлингтонского терьера.com/spring-boot…

Добавить Автора

Переводчик: Лизен