【发布时间】:2019-02-22 14:27:51
【问题描述】:
为什么 logback 允许通过设置为级别 INFO 的根记录器进行 DEBUG 输出?
上下文是一个使用 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{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX", 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
由于使用了注释,我不确定是否找到了创建上面显示的删除输出的确切类。我从谷歌搜索中看到,有些人建议记录 shim 类的交互;但我不确定。
非常相似的 SO 问题(所以我并不孤单:)但没有答案:Using logback, debug messages are still being logged though root level is set to "Error"
提前感谢任何提示。
【问题讨论】:
标签: java spring hibernate logging logback