代码之家  ›  专栏  ›  技术社区  ›  chrisinmtown

配置org.hibernate.SQL logger时,Logback显示根在级别INFO的调试输出

  •  1
  • chrisinmtown  · 技术社区  · 6 年前

    为什么logback允许通过设置为level 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>
    

    在JUnit测试期间,文件中会出现大量的信息/警告/错误消息。但是我很惊讶地看到org.hibernate.SQL中的以下调试输出,这是唯一一个提供调试级输出的包。我想我必须将根记录器设置为leveldebug才能允许这样做;我想等级信息会阻止它:

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

    https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/internal/CoreLogging.java

    由于使用了注释,我不确定是否找到了创建上面所示的Delete输出的确切类。我从google上看到,有些人建议使用日志填充类的交互;但我不确定。

    非常相似的问题(所以我并不孤单:)但没有答案: Using logback, debug messages are still being logged though root level is set to "Error"

    3 回复  |  直到 6 年前
        1
  •  1
  •   glytching    6 年前

    the docs

    给定记录器L的有效级别等于其层次结构中的第一个非空级别,从L本身开始,在层次结构中向上延伸到根记录器。

    那么,你呢 为记录器定义覆盖根级别的有效级别。您看到的行为是默认的Logback行为。

    如果要从禁用调试日志记录 org.hibernate.SQL

    • 拆下 org.hibernate.SQL 记录员假设 root 记录器级别
    • 分配 org.hibernate.SQL
        2
  •  1
  •   coladict    6 年前

      <logger name="org.hibernate.SQL" level="DEBUG" />
    
        3
  •  0
  •   aritstack    6 年前

    然后日志消息被发送到根记录器,而不管其日志级别如何。