p6spy对于调试hibernate查询非常有用,但是,有什么方法可以用Hibernate的相同逻辑格式化查询吗?
<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
(?, ?)我认为hibernate格式更具可读性,我希望在p6spy中使用类似的格式。
谢谢。
发布于 2013-12-21 01:59:46
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。
顺便说一句,如果您确实创建了一个新的格式化策略,并希望与我们分享它,请向我们发送一个拉取请求。P6Spy现在在GitHub上进行维护。
https://stackoverflow.com/questions/11030697
复制相似问题