SQLのログ機能を強化
次のバージョンで、SQLの種別(SELECTかINSERTかとか)を簡単に判別してログ出力可能にします。対応しようと思ったきっかけは、seasar-userのML。http://ml.seasar.org/archives/seasar-user/2009-December/018946.html
DBFluteのログ出力でSelect文以外のSQL(Update、Insert等)のログだけ取得したい場合、
どのような設定が必要ですか?
O/Rマッパーを使っていると確かにそういう局面ありますね。
Domaでは、JdbcLoggerというインタフェースを提供していて、これを実装してもらうと好きなフォーマットでSQLをログ出力できます。(もちろん使うログライブラリは自由)
public interface JdbcLogger { void logSql(String callerClassName, String callerMethodName, Sql<?> sql); ... }
logSqlメソッドでわたってくるパラメータにSqlというインタフェースがあるのですが、ここにSQLの種別を返すgetKindメソッドを追加することにしました。
public interface Sql<P extends SqlParameter> { SqlKind getKind(); // これを新規に追加 String getRawSql(); String getFormattedSql(); String getSqlFilePath(); List<P> getParameters(); }
SqlKindはこんなEnum型。Daoのメソッドに指定するアノテーションに対応しています。
public enum SqlKind { SELECT, INSERT, UPDATE, DELETE, BATCH_INSERT, BATCH_UPDATE, BATCH_DELETE, PROCEDURE, FUNCTION }
SqlKindを使えば特定のSQLだけログに記録するということが簡単にできます。
public class MyJdbcLogger implements JdbcLogger { public void logSql(String callerClassName, String callerMethodName, Sql<?> sql) { switch (sql.getKind()) { case INSERT: case UPDATE: case DELETE: ... break; } } ... }