在调试日志记录级别,JOOQ 正在记录存储的过程语句、执行时间和结果数。但它没有记录存储过程的实际绑定(bind)值。我正在将 JOOQ 与 Oracle 一起使用。 设置对象准备如下 -
Configuration configuration = new DefaultConfiguration()
.set(new JooqTxConnectionProvider(dataSource))
.set(SQLDialect.ORACLE)
.set(recordMapperProvider)
.set(new Settings()
.withRenderSchema(false)
.withRenderNameStyle(RenderNameStyle.AS_IS)
.withExecuteLogging(false))
.set(new DefaultExecuteListenerProvider(
new CallableStatementExecuteListener()),
new DefaultExecuteListenerProvider(
new LoggingExecuteTimeListener(configurationManager)));
日志输出如下所示 -
2014-01-27 23:03:31,204 DEBUG [requests-52 R:30 A:400663505008 E:400663505008 S:400049845008] org.jooq.tools.LoggerListener - 执行查询:开始 STATE.CREATE_SESSION(ID_OUT => ?,服务器 => ?);结束;
2014-01-27 23:03:31,207 DEBUG [requests-52 R:30 A:400663505008 E:400663505008 S:400049845008] org.jooq.tools.StopWatch - 执行的查询:总计:2.976ms
2014-01-27 23:03:31,207 DEBUG [requests-52 R:30 A:400663505008 E:400663505008 S:400049845008] org.jooq.tools.StopWatch - 整理:总计:3.186ms,+0.209ms
我想看到的是包含“带有绑定(bind)值”和过程的实际绑定(bind)参数的行。
最佳答案
看来 jOOQ 3.2.2 的默认记录器 LoggerListener
不会内联绑定(bind)独立存储过程调用的值。这是一个错误,应该修复:#2987
无论如何,如果您希望记录绑定(bind)值,您有多种选择:
- 启用“跟踪”日志记录。然后,jOOQ 将在新行中记录所有绑定(bind)值。但这相当冗长
实现您自己的记录器,使用内联绑定(bind)值重新呈现 Routine 对象。这可以这样完成:
@Override public void renderEnd(RenderContext ctx) { // [...] log.debug(DSL.using(configuration) .renderInlined(ctx.routine())); }
关于java - 使用 JOOQ 记录存储过程的绑定(bind)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395687/