java - 配置 org.hibernate.SQL 记录器时,Logback 显示 DEBUG 输出,root 级别为 INFO

原文 标签 java spring hibernate logging logback

为什么 logback 允许通过设置为级别 INFO 的根记录器进行调试输出?

上下文是一个使用 Hibernate 的 spring-boot-starter 项目。 POM 在 1.2.0 版本中命名为 logback-classic 和 logback-core。以下配置文件位于其类路径 (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>

在 JUnit 测试期间,文件中会出现大量 INFO/WARN/ERROR 消息。但是我很惊讶地看到以下来自 org.hibernate.SQL 的 DEBUG 输出,这是提供调试级别输出的唯一包。我想我必须将根记录器设置为 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 输出的确切类。我从谷歌搜索中看到,有些人建议记录 shim 类的交互;但我不确定。

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

提前感谢您的任何提示。

最佳答案

来自 the docs :

The effective level for a given logger L, is equal to the first non-null level in its hierarchy, starting at L itself and proceeding upwards in the hierarchy towards the root logger.



因此,您可以为覆盖根级别的记录器定义有效级别。您看到的行为是默认的 Logback 行为。

如果您想从 org.hibernate.SQL 禁用调试日志记录然后记录器:
  • 删除 org.hibernate.SQL记录器配置,因为这将导致 org.hibernate.SQL记录器承担 root记录器级别
  • 分配 org.hibernate.SQL logger 日志级别不是 DEBUG
  • 关于java - 配置 org.hibernate.SQL 记录器时,Logback 显示 DEBUG 输出,root 级别为 INFO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52388483/

    相关文章:

    java - 使用Eclipse在GAE开发环境中访问Java的本地MySQL实例

    java - Spring JSON 请求得到 406( Not Acceptable )

    java - 如何修复 Hibernate LazyInitializationException : failed to lazily initialize a collection of roles, 无法初始化代理 - 没有 session

    java.lang.IllegalStateException : Fragment

    java - 缩略图轮播 - 单个图像滑动显示错误。它是滑动全 slider

    java - Spring数据查询非常慢

    java - 用于监控 Hibernate 缓存使用情况的工具

    java - org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@779de014 已关闭

    java - Tapestry 5.4 core.properties覆盖

    spring - docker中RabbitMQ的Spring Boot Application问题