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
, вы увидите напечатанное в контроллереTRACE
level 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…
Добавить Автора
Переводчик: Лизен