Logback показывает вывод DEBUG с корнем на уровне INFO, когда настроен регистратор org.hibernate.SQL - PullRequest
0 голосов
/ 18 сентября 2018

Почему при входе в систему журнал разрешает вывод DEBUG через корневой регистратор, настроенный на уровень INFO?

Контекст представляет собой проект spring-boot-starter, использующий Hibernate.POM называет logback-classic и logback-core версии 1.2.0.Следующий конфигурационный файл находится в своем пути к классам (src / main / resources), устанавливает корневой регистратор на уровень INFO.

logback-test.xml:

<configuration scan="true" debug="false">
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/test.log</file>
    <encoder>
      <pattern>%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC} [%thread] %-5level %logger{5} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="INFO">
    <appender-ref ref="FILE" />
  </root>
  <logger name="org.hibernate.SQL" level="DEBUG" />
</configuration>

Большое количество сообщений INFO / WARN / ERROR поступает в файл во время теста JUnit.Но я удивлен, увидев следующий вывод DEBUG из org.hibernate.SQL, который является ЕДИНСТВЕННЫМ пакетом, который обеспечивает вывод уровня отладки.Я подумал, что мне придется установить корневой логгер на уровень DEBUG, чтобы это разрешить;Я полагал, что уровень INFO заблокирует его:

2018-09-18T13:31:02.596Z [http-nio-auto-1-exec-4] DEBUG o.h.SQL - delete from C_NOTIF_XYZ where ID=?

Под обложками кажется, что Hibernate использует org.jboss.logging.Logger через аннотации, см. https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/internal/CoreLogging.java

Из-за использования аннотацийЯ не уверен, что нашел точный класс, который создает вывод Delete, показанный выше.По гуглу я вижу, что некоторые люди предлагают взаимодействие между классами шим-логов;но я не уверен.

Очень похожий вопрос SO (поэтому я не одинок :), но нет ответа: Используя logback, сообщения отладки все еще регистрируются, хотя для корневого уровня установлено значение "Ошибка""

Заранее благодарим за любые подсказки.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

С Документы :

Эффективный уровень для данного регистратора L, равен первому ненулевому уровню в его иерархии, начиная с самого L и продолжаявверх по иерархии в сторону корневого регистратора.

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

Если вы хотите отключить ведение журнала DEBUG из org.hibernate.SQL logger, тогда либо:

  • Удалите конфигурацию org.hibernate.SQL logger, так как этозаставит регистратор org.hibernate.SQL принять root уровень регистратора
  • Назначить org.hibernate.SQL регистратору уровень журнала, отличный от DEBUG
0 голосов
/ 20 марта 2019

В данный момент я не нахожу ссылку на документацию, но я подтверждаю этот режим работы: поведение для регистраторов предков достигнуто из-за аддитивности, которая по умолчанию установлена ​​в значение true, пропускает проверки уровня журнала.Затем сообщение журнала отправляется корневому регистратору независимо от его уровня журнала.

0 голосов
/ 18 сентября 2018

Удалить эту строку:

  <logger name="org.hibernate.SQL" level="DEBUG" />
...