2012-06-14 1 views
1

p6spy очень полезен для отладки запроса на спящий режим, но есть ли способ форматировать запрос с помощью той же логики Hibernate? :p6spy log vs. Hibernate log

<property name="hibernate.format_sql" value="true" /> 

p6spy пример журнала: p6spy - 1339663561390|15|0|statement|select personne0_.id as id5_,personne0_.dateNaissance as dateNais2_5_, personne0_.nom as nom5_, personne0_.prenom as prenom5_, personne0_.type as type5_ from Personne personne0_ where personne0_.nom=?|select personne0_.id as id5_, personne0_.dateNaissance as dateNais2_5_, personne0_.nom as nom5_, personne0_.prenom as prenom5_, personne0_.type as type5_ from Personne personne0_ where personne0_.nom='example'

Hibernate войти пример:

Hibernate: 
    insert 
    into 
     TABLE 
     (COLUMN_1, COLUMN_2) 
    values 
     (?, ?) 

Я думаю, что формат спящего режима является более удобным для чтения, и я хочу что-то подобное с p6spy.

спасибо.

ответ

1

P6Spy захватывает инструкцию SQL и записывает ее как «как есть». Он вообще не пытается делать какие-либо форматирования. Однако P6Spy можно легко расширить, чтобы иметь поведение, которое вы ищете. Как это работает, зависит от версии 1.3 и 2.0 (проще в версии 2.0).

1.3 - Подкласс в зависимости от того, какой регистратор вы используете и переопределяете метод logSQL (...). Например, если вы используете FileLogger, ваш подкласс может выглядеть примерно так, как показано ниже. Когда у вас есть скомпилированный класс в пути к классам, просто обновите spy.properties, чтобы использовать новую реализацию регистратора.

public class MyLogger extends FileLogger { 
    public void logSQL(int connectionId, String now, long elapsed, String category, String prepared, String sql) { 
    super.logSQL(connectionId,now,elapsed,category,reformat(prepared),reformat(sql)); 
    } 
    private String reformat(final String sql) { 
    // formatting logic goes here 
    } 
} 

2,0 - В версии 2.0 мы добавили новый интерфейс стратегии для обработки журнального сообщения форматирования. Это примерно такая же работа, как предоставление нового регистратора, но он будет использоваться всеми регистраторами. Вам просто нужно предоставить класс, который реализует интерфейс MessageFormattingStrategy. Чтобы p6spy использовала новую стратегию, вы просто настраиваете ее в spy.properties или устанавливаете системное свойство. См. the configuration docs. Например, посмотрите на MultiLineFormat.

BTW - Если вы создаете новую стратегию форматирования и хотите поделиться ею, пришлите нам запрос на вытягивание. P6Spy теперь поддерживается на GitHub.

 Смежные вопросы

  • Нет связанных вопросов^_^