SpringBoot + JPA 的日志打印问题

2023-08-12 11:49:52 +08:00
 Koril

一开始是使用以下配置,打印 SQL 语句:

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

发现无法打印查询的参数,遂按照网上的一些教程改成了以下配置:

spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

但是我发现这样配置以后,查询参数虽然打印出来了,但是缺少 limit 和 offset 的参数值,请问大佬们该如何解决这个问题?

924 次点击
所在节点    问与答
1 条回复
BiChengfei
2023-08-12 15:40:37 +08:00
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.1.0</version>
</dependency>

`application.yml`配置:
```
logging:
level:
root: info
org:
hibernate:
orm:
jdbc:
bind: trace
```
连接 MySQL 8.0 ,打印日志如下:
```
Hibernate: select e1_0.id,e1_0.name,e1_0.tenantId,e1_0.timeCreated,e1_0.timeLastUpdated from t_main_ent e1_0 order by e1_0.id limit ?,?
2023-08-12T15:32:00.610+08:00 TRACE 2644 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [1] as [INTEGER] - [0]
2023-08-12T15:32:00.610+08:00 TRACE 2644 --- [nio-8080-exec-1] org.hibernate.orm.jdbc.bind : binding parameter [2] as [INTEGER] - [234]
Hibernate: select e1_0.id,e1_0.name,e1_0.tenantId,e1_0.timeCreated,e1_0.timeLastUpdated from t_main_ent e1_0 where e1_0.id=?
2023-08-12T15:34:51.807+08:00 TRACE 2644 --- [nio-8080-exec-5] org.hibernate.orm.jdbc.bind : binding parameter [1] as [BIGINT] - [1]
```
个人经验之谈:在不知道是哪个类输入的日志之前,就把整个项目的日志级别( logging.level.root )改为最小粒度,trace 一般就可以,然后从日志里面看对应的 SQL 和参数是哪个类输出的,就把对应的类的日志级别设置成相应的粒度

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/964656

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX