问题描述
我已经在此处查看了有关该主题的几个问题/答案,但没有任何开箱即用的方法。我还阅读了官方文档中的 SqlLogger 部分,但我仍然找不到记录/可视化 jdbi(版本 3.x
)在与数据库交互时“正在做什么”的方法? — 以一种直接的方式。
我知道 jdbi 使用的是几乎原始的 sql,但是能够看到框架/库说它为了调试目的而做什么总是很好。
我尝试了从 org.jdbi
开始(在 logback.xml
文件中)到 trace
模式的几乎所有命名空间,但我只看到如下内容:
03-01-2021 19:52:26,656 |- TRACE in org.jdbi.v3.core.jdbi:315 [reactor-http-epoll-2] - jdbi [org.jdbi.v3.core.jdbi@7a76fb45] obtain handle [org.jdbi.v3.core.Handle@725d5aec] in 0ms
03-01-2021 19:52:26,697 |- TRACE in org.jdbi.v3.core.Handle:187 [reactor-http-epoll-2] - Handle [org.jdbi.v3.core.Handle@725d5aec] released
现在有没有办法做到这一点?
解决方法
不是 JDBI 答案,而是查看原始 SQL 的更通用方法是使用 JDBC 代理,如 P6Spy 或 datasource-proxy。
P6Spy 允许通过修饰 DataSource
或存根 JDBC 驱动程序(不需要更改代码)来拦截并以格式打印日志:
p6spy: #1617156635 | took 0ms | statement | connection 3|SELECT NOW()
Datasource-proxy 只支持修饰 DataSource
和打印:
n.t.d.l.l.SLF4JQueryLoggingListener:
Name:,Time:0,Success:True
Type:Statement,Batch:False,QuerySize:1,BatchSize:0
Query:["SELECT NOW()"]
Params:[]