Spring Boot项目Hibernate SQL参数日志不显示问题解决方案问询
修复方案
1. 修正Hibernate参数绑定日志配置
你当前配置的logging.level.org.hibernate.type.descriptor.sql=trace粒度不足,Spring Boot 2.0.x对应的Hibernate 5.x版本需要精确到参数绑定器的日志级别,在application.properties中将对应配置替换为:
# 输出SQL语句 logging.level.org.hibernate.SQL=DEBUG # 输出SQL绑定的实际参数 logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
配置完成后控制台会按占位符顺序输出每个参数的类型和实际值。
2. 移除配置项前多余空格
你现有application.properties里的 spring.jpa.hibernate.ddl-auto=create-only行首多了一个空格,会导致该配置不生效,删除行首空格即可。
3. 排查自定义日志配置的过滤规则
如果修改后依然看不到参数,检查项目中是否存在logback.xml、log4j2.xml等自定义日志配置文件,确认没有对org.hibernate包下的TRACE级别日志做屏蔽,也没有将全局日志输出级别设置为高于TRACE。
4. 可选:使用p6spy直接输出完整可执行SQL
如果需要直接拿到拼接好参数、可以直接运行的完整SQL,不需要手动对照占位符匹配参数,可以引入p6spy组件:
- 首先在pom.xml中添加依赖:
<dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.9.1</version> </dependency>
- 其次修改application.properties中的数据库连接配置:
# 数据库驱动替换为p6spy驱动 spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver # 原有JDBC URL前加上p6spy前缀,示例如下 spring.datasource.url=jdbc:p6spy:h2:mem:db;DB_CLOSE_DELAY=-1
- 最后在resources目录下新增spy.properties配置文件,基础配置如下:
module.log=com.p6spy.engine.logging.P6LogFactory appender=com.p6spy.engine.spy.appender.StdoutLogger logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
配置完成后启动项目,控制台会直接输出替换完所有占位符的完整可执行SQL。
内容的提问来源于stack exchange,提问作者Constantine Lee
相关产品推荐
相关产品推荐

