首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >p6spy日志与Hibernate日志

p6spy日志与Hibernate日志
EN

Stack Overflow用户
提问于 2012-06-14 17:57:07
回答 1查看 701关注 0票数 2

p6spy对于调试hibernate查询非常有用,但是,有什么方法可以用Hibernate的相同逻辑格式化查询吗?

代码语言:javascript
复制
<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日志示例:

代码语言:javascript
复制
Hibernate: 
    insert 
    into
        TABLE
        (COLUMN_1, COLUMN_2) 
    values
        (?, ?)

我认为hibernate格式更具可读性,我希望在p6spy中使用类似的格式。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-12-21 01:59:46

P6Spy捕获SQL语句并按“原样”记录它。它根本不会尝试进行任何类型的格式化。但是,可以很容易地对P6Spy进行扩展,使其具有您正在寻找的行为。其工作原理在1.3版和2.0版之间有所不同(在2.0版中更简单)。

1.3 -子类化当前使用的任何记录器并覆盖logSQL(...)方法。例如,如果您使用的是FileLogger,您的子类可能类似于下面的示例。将编译好的类放到类路径中之后,只需更新spy.properties以使用新的记录器实现。

代码语言:javascript
复制
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

顺便说一句,如果您确实创建了一个新的格式化策略,并希望与我们分享它,请向我们发送一个拉取请求。P6Spy现在在GitHub上进行维护。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11030697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档