You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法禁用或调整Hibernate日志级别?已尝试Hibernate配置无效

解决Hibernate日志在Logback中无法禁用/调整的问题

我完全懂你遇到的困扰——你在hibernate.cfg.xml里设置了show_sql=false等属性,但Hibernate的日志还是一个劲地输出到自定义的Logback日志文件里。这是因为Hibernate的核心日志输出是通过SLF4J(Logback是它的实现)完成的,你在hibernate.cfg.xml里的那些配置,其实只控制Hibernate直接向控制台打印SQL的行为,根本影响不到Logback对Hibernate日志的处理逻辑。

为什么你的现有配置无效?

  • show_sql=false:这个属性只是关闭Hibernate自己往控制台打SQL的功能,但Hibernate依然会通过日志框架(也就是你的Logback)输出SQL相关的DEBUG级日志。
  • hibernate.generate_statistics=falsehibernate.use_sql_comments=false:这俩分别控制统计信息生成和SQL注释添加,和日志级别没有半毛钱关系。

正确解决方案:在Logback中直接配置Hibernate日志级别

你需要在logback.xml里针对Hibernate的包明确设置日志级别,这才是真正能控制它日志输出的方式。下面是几种常见需求对应的配置:

1. 整体降低Hibernate日志级别(推荐)

如果不想看到Hibernate的大部分调试日志,直接把org.hibernate包的日志级别设为WARNERROR就行:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
 <discriminator>
 <key>classname</key>
 <defaultValue>unknown</defaultValue>
 </discriminator>
 <sift>
 <appender name="FILE-${classname}" class="ch.qos.logback.core.FileAppender">
 <append>false</append>
 <file>${classname}.log</file>
 <layout class="ch.qos.logback.classic.PatternLayout">
 <pattern>%d{HH:mm:ss:SSS} | %-5level | %thread | %logger{20} | %msg%n%rEx</pattern>
 </layout>
 </appender>
 </sift>
 </appender>

 <!-- 添加这部分Hibernate日志配置 -->
 <logger name="org.hibernate" level="WARN" additivity="false">
     <appender-ref ref="SIFT"/>
 </logger>

 <root level="ALL">
 <appender-ref ref="SIFT"/>
 </root>
</configuration>
  • level="WARN":只会输出警告及以上级别的日志,过滤掉所有DEBUG/INFO级的调试信息。
  • additivity="false":避免Hibernate的日志同时输出到root appender(防止重复打日志)。

2. 仅禁用SQL日志,保留其他Hibernate日志

要是你只是不想看到SQL语句,但还想保留Hibernate的其他日志,可以单独针对SQL相关的包设置级别为OFF

<!-- 禁用SQL语句日志 -->
<logger name="org.hibernate.SQL" level="OFF" additivity="false">
    <appender-ref ref="SIFT"/>
</logger>
<!-- 禁用SQL参数绑定的日志(可选) -->
<logger name="org.hibernate.type.descriptor.sql" level="OFF" additivity="false">
    <appender-ref ref="SIFT"/>
</logger>

额外验证小技巧

  • 确保logback.xml放在项目的src/main/resources目录下(Maven/Gradle项目),或者已经被正确添加到类路径中。
  • 可以临时加一个控制台appender测试配置是否生效:
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%d{HH:mm:ss:SSS} | %-5level | %logger{20} | %msg%n</pattern>
    </layout>
</appender>

然后在root logger里添加<appender-ref ref="CONSOLE"/>,这样就能直接在控制台看到日志级别是否生效了。

内容的提问来源于stack exchange,提问作者Buddy

火山引擎 最新活动