Spring Boot 2.1 запускает корневой логгер в режиме отладки, пока не напечатает баннер? - PullRequest
0 голосов
/ 21 ноября 2018

Вот несколько выводов, чтобы привести пример того, о чем я говорю.Сообщения отладки приходят не только от регистратора Aspect4J, но и от нескольких других классов.Я отладил приложение и обнаружил, что Root logger установлен на DEBUG, а затем на INFO после печати Spring Banner (я не думаю, что баннер определенно имеет к этому какое-то отношение).

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

Я также попытался установить.

# Logging
logging.level.root=INFO
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO

InМой файл application.properties, но это не помогло, Spring Boot 2.1 по-прежнему выводит все на уровне DEBUG до тех пор, пока баннер не будет напечатан.Любая идея о том, как я могу предотвратить появление Root-логгера как DEBUG вместо INFO в начале, была бы отличной.

15:34:47.971 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'org.springframework.boot.logging.AbstractLoggingSystem'
15:34:47.974 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'ch.qos.logback.classic.joran.JoranConfigurator'
15:34:47.976 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'ch.qos.logback.core.joran.JoranConfiguratorBase'
15:34:47.979 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'ch.qos.logback.core.joran.GenericConfigurator'
15:34:47.980 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'org.springframework.boot.logging.logback.SpringBootJoranConfigurator'
15:34:47.982 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'ch.qos.logback.classic.spi.LoggerContextListener'
15:34:47.985 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'ch.qos.logback.classic.turbo.TurboFilter'
15:34:47.987 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'org.springframework.boot.logging.logback.LogbackLoggingSystem$1'
15:34:47.988 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'org.springframework.boot.logging.LoggerConfigurationComparator'
15:34:47.989 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'org.springframework.boot.logging.AbstractLoggingSystem$LogLevels'
15:34:48.009 [main] DEBUG AspectJ Weaver - [AspectJ] not weaving 'org.slf4j.bridge.SLF4JBridgeHandler'

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.1.RELEASE)

2018-11-21 15:34:50.094  INFO 1 --- [           main] c.s.technology.screening.SpringConfig    : Starting SpringConfig on 940e73166080 with PID 1 (/web.jar started by root in /)
2018-11-21 15:34:50.100  INFO 1 --- [           main] c.s.technology.screening.SpringConfig    : No active profile set, falling back to default profiles: default
2018-11-21 15:34:50.420  INFO 1 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4e0ae11f: startup date [Wed Nov 21 15:34:50 EST 2018]; root of context hierarchy
2018-11-21 15:34:53.506  INFO 1 --- [           main] AspectJ Weaver                           : [AspectJ] Join point 'method-execution(org.springframework.data.domain.Page com.sasquatch.technology.screening.api.JobController.listJobs(org.springframework.data.domain.Pageable))' in Type 'com.sasquatch.technology.screening.api.JobController' (JobController.java:48) advised by around advice from 'org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect' (AnnotationSecurityAspect.aj:70)
2018-11-21 15:34:53.525  INFO 1 --- [           main] AspectJ Weaver                           : [AspectJ] Join point 'method-execution(com.sasquatch.technology.screening.persistence.entities.Job com.sasquatch.technology.screening.api.JobController.addJob(com.sasquatch.technology.screening.persistence.entities.Job))' in Type 'com.sasquatch.technology.screening.api.JobController' (JobController.java:54) advised by around advice from 'org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect' (AnnotationSecurityAspect.aj:70)
2018-11-21 15:34:53.620  INFO 1 --- [           main] AspectJ Weaver                           : [AspectJ] Join point 'method-execution(org.springframework.http.ResponseEntity com.sasquatch.technology.screening.api.TestHelperController.resetDatabase())' in Type 'com.sasquatch.technology.screening.api.TestHelperController' (TestHelperController.java:45) advised by around advice from 'org.springframework.transaction.aspectj.AnnotationTransactionAspect' (AbstractTransactionAspect.aj:66)

1 Ответ

0 голосов
/ 22 ноября 2018

Мне удалось проследить источник проблемы до того факта, что Spring не устанавливает уровень ведения журнала, пока не инициализирует и не запустит класс реализации для org.springframework.boot.logging.LoggingSystem.И когда Logback загружается, он устанавливает Root logger на DEBUG по умолчанию в ch.qos.logback.classic.LoggerContext class this.root.setLevel(Level.DEBUG).

. Я добавил следующий код в статический блок инициализации внутри класса, который содержит main ()метод, который загружает приложение Spring.Корневой регистратор извлекается (который инициализирует его как DEBUG), а затем преобразуется в Logback logger.Имейте в виду, это означает, что эта реализация исправления привязана к реальной реализации ведения журнала на пути к классам.Если бы я делал все свои журналы через log4j или apache commons, то регистратор, который я получаю из LoggerFactory.getLogger(), был бы другого типа и, следовательно, нуждался бы в другом приведении.Это приведение необходимо, потому что фасад SLF4J не предоставляет методов для программного изменения уровня ведения журнала.Как только у меня появилась ссылка на корневой логгер, я просто установил уровень.Этот уровень в конечном итоге переопределяется Spring, поэтому мне нужно будет выполнить некоторые дополнительные операции, если я хочу автоматически сохранить настройки Spring и мой блок инициализации одинаковыми.

@SpringBootApplication
public class SpringConfig {

    static {
        ((ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).setLevel(Level.INFO);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...