Au niveau de la journalisation du débogage, JOOQ enregistre stockéinstruction proc, temps d'exécution et nombre de résultats. Mais il n'enregistre pas les valeurs de liaison réelles pour la procédure stockée. J'utilise JOOQ avec Oracle. L'objet Paramètres est préparé comme suit -
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)));
La sortie de journalisation apparaît comme suit -
2014-01-27 23: 03: 31,204 DEBUG [demandes-52 R: 30 A:400663505008 E: 400663505008 S: 400049845008] org.jooq.tools.LoggerListener - Exécution de la requête: commencer STATE.CREATE_SESSION (ID_OUT =>?, SERVER =>?); fin;
2014-01-27 23: 03: 31,207 DEBUG [demandes-52 R: 30 A: 400663505008 E: 400663505008 S: 400049845008] org.jooq.tools.StopWatch - Requête exécutée: Total: 2,976 ms
2014-01-27 23: 03: 31,207 DEBUG [demandes-52 R: 30 A: 400663505008 E: 400663505008 S: 400049845008] org.jooq.tools.StopWatch - Finishing: Total: 3.186ms, + 0.209ms
Ce que j'aimerais voir, c'est la ligne contenant "avec les valeurs de liaison" et les paramètres de liaison réels à la procédure.
Réponses:
2 pour la réponse № 1Il semble que l'enregistreur par défaut de jOOQ 3.2.2 LoggerListener
ne lie pas en ligne les valeurs des appels de procédure stockée autonomes. C'est un bug et devrait être corrigé: # 2987
Quoi qu'il en soit, si vous souhaitez que les valeurs de liaison soient enregistrées, vous avez plusieurs options:
- Activez la journalisation "trace". jOOQ enregistrera alors toutes les valeurs de liaison sur une nouvelle ligne, chacune. Mais c'est assez verbeux
Implémentez votre propre enregistreur qui restitue l'objet Routine avec des valeurs de liaison en ligne. Cela peut être fait comme tel:
@Override public void renderEnd(RenderContext ctx) { // [...] log.debug(DSL.using(configuration) .renderInlined(ctx.routine())); }
1 pour la réponse № 2
Juste pour développer un peu la réponse de Lukas, voici à quoi ressemble ma configuration actuelle, avec jOOQ 3.1.0, y compris la solution de contournement pour ce bogue de journalisation:
DSLContext create = DSL.using(
new DefaultConfiguration()
.set(new DataSourceConnectionProvider(dataSource))
.set(SQLDialect.ORACLE)
.set(
new org.jooq.conf.Settings()
.withRenderFormatted(true)
.withExecuteLogging(false)
)
.set(new ExecuteListenerProvider() {
@Override
public ExecuteListener provide() {
return new LoggerListener() {
@Override
public void renderEnd(ExecuteContext ctx) {
super.renderEnd(ctx);
JooqLogger log =
JooqLogger.getLogger(LoggerListener.class);
if (log.isDebugEnabled()) {
if (ctx.routine() != null) {
log.debug(
DSL.using(ctx.configuration())
.renderInlined(ctx.routine())
);
}
}
}
};
}
})
);