Рубрики
Без рубрики

Установка уровня журнала в весенней загрузке при тестировании

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

Автор оригинала: baeldung.

Установка уровня журнала в весенней загрузке при тестировании

1. Обзор

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

Хотя мы можем в основном игнорировать журналы в то время как наши тесты проходят, выбор правильного уровня журнала может иметь решающее значение, если есть необходимость диагностировать неудачные тесты .

2. Важность уровня журнала

Правильное настройка уровня журнала может сэкономить нам много времени.

Например, если тесты не работают на сервере CI, но проходят на нашей машине разработки, мы не сможем диагностировать неудачные тесты, если у нас не будет достаточного количества выходных данных . С другой стороны, если мы зайдем слишком много деталей, может быть труднее найти полезную информацию.

Чтобы получить нужное количество деталей, мы можем точно настроить уровни регистрации пакетов нашего приложения. Если мы обнаружим, что пакет Java имеет более важное значение для наших тестов, мы можем дать ему более низкий уровень, как ОТЛАДИТЬ . Аналогичным образом, чтобы избежать слишком большого шума в наших журналах, мы можем настроить более высокий уровень, скажем, ИНФО или ОШИБКА, для менее важных пакетов.

Давайте рассмотрим различные способы настройки уровня регистрации.

3. Настройки регистрации в application.properties

Если мы хотим изменить уровень журнала в наших тестах, есть свойство, которое мы можем установить в src/test/resources/ application.properts :

logging.level.com.baeldung.testloglevel=DEBUG

Это свойство будет установить уровень журнала специально для com.baeldung.testloglevel пакет.

Аналогичным образом, мы можем изменить уровень регистрации для всех пакетов установка уровня корневого журнала :

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.properts будет работать в большинстве ситуаций, могут быть случаи, когда мы хотели бы имеют разные настройки для одного теста или группы тестов .

В таком случае, мы можем добавить Весенний профиль к нашему тестовому с помощью ActiveProfiles аннотация:

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

    // ...

}

Наши настройки регистрации будут в специальном приложения-регистрации-test.properts файл в src/test/ресурсы :

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

Если мы позвоним TestLogLevelController из наших тестов с описанными настройками, мы теперь увидим TRACE журналы с нашего контроллера, и не будет больше ИНФО журналы из других пакетов:

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. Настройка логбека

Если мы используем Логбэк , который используется по умолчанию в весенней загрузки, мы можем установить уровень журнала в бревенчатый тест.xml файл в src/test/ресурсы:


    
    
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            
        
    
    
        
    
    

В приведенном выше примере показано, как установить уровень журнала в конфигурации Logback для тестов.  Уровень корневого журнала установлен для ИНФО и уровень журнала для наших com.baeldung.testloglevel пакет установлен на ОТЛАДИТЬ .

Опять же, давайте проверим выход после применения настроек сверху:

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. Конфигурация логбека на основе профиля

Еще один способ настройка конкретной конфигурации профиля для наших тестов заключается в том, чтобы установить logging.config недвижимость в application.properts для нашего профиля:

logging.config=classpath:logback-testloglevel.xml

Или, еще один, скажем, если мы хотим иметь одну конфигурацию Logback на нашем classpath, заключается в использовании веснаПрофильное элемент в бревенчатый .xml :


    
    
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            
        
    
    
        
    
    
        
    
    
        
    

Теперь, если мы позвоним TestLogLevelController в наших тестах с профилем logback-test1 , мы получим следующий выход:

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 , мы можем установить уровень журнала в log4j2-весна.xml файл в src/test/ресурсы:


    
        
            
        
    

    
        

        
            
        
    

Мы можем проставить путь нашей Log4J конфигурации, установив logging.config недвижимость в application.properts :

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 . Мы изучили несколько различных способов его настройки.

Установка уровня журнала в файле Весенней application.properts показал себя как самый простой, особенно когда мы используем @SpringBootTest аннотация.

Как всегда, исходный код для этих примеров закончился на GitHub .