2014-01-28 4 views
2

На уровне ведения журнала отладки JOOQ регистрирует хранимую процедуру proc, время выполнения и количество результатов. Но он не регистрирует фактические значения привязки для хранимой процедуры. Я использую JOOQ с Oracle. Объект Настройки получают следующим образом -Запись значений привязки для хранимой процедуры с использованием JOOQ

выход
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: 31204 ОТЛАДКА [запросы-52 R: 30 А: 400663505008 Е: 400663505008 S: 400049845008] org.jooq.tools.LoggerListener - Выполнение запроса: начните STATE.CREATE_SESSION (ID_OUT =>?, SERVER =>?); конец;

2014-01-27 23: 03: 31207 ОТЛАДКА [запросов-52 R: 30 А: 400663505008 E: 400663505008 S: 400049845008] org.jooq.tools.StopWatch - Запрос выполняется: Всего: 2.976ms

2014-01-27 23: 03: 31,207 DEBUG [запросы-52 R: 30 A: 400663505008 E: 400663505008 S: 400049845008] org.jooq.tools.StopWatch - Отделка: всего: 3.186ms, + 0.209ms

То, что я хотел бы видеть, - это строка, содержащая «со значениями привязки» и фактические параметры привязки к процедуре.

ответ

2

Похоже, что регистратор jOOQ 3.2.2 по умолчанию LoggerListener не имеет встроенных значений привязки автономных вызовов хранимых процедур. Это ошибка и должно быть исправлено: #2987

Во всяком случае, если вы хотите, связывают значения, чтобы быть зарегистрированными, у вас есть несколько вариантов:

  1. Включить «след» протоколирование. Затем jOOQ записывает все значения привязки по новой строке. Но это довольно многословно.
  2. Реализовать собственный журнал, который повторно отображает объект Routine с встроенными значениями привязки. Это можно сделать так:

    @Override 
    public void renderEnd(RenderContext ctx) { 
        // [...] 
        log.debug(DSL.using(configuration) 
           .renderInlined(ctx.routine())); 
    } 
    
1

Просто уточнить ответ Лукаса немного, вот что моя текущая конфигурация выглядит, с jOOQ 3.1.0, в том числе для обхода этой лесозаготовительной ошибки:

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()) 
           ); 
          } 
         } 
        } 
       }; 
      } 
     }) 
); 
Смежные вопросы