H2のログを出す

URLをこんな感じにします。以下はインメモリで起動したときでの例。

jdbc\:h2\:mem\:test;DB_CLOSE_DELAY\=-1;TRACE_LEVEL_FILE\=4

O/Rマップとか使用していると、どうしても実際に発行されているSQLがみたくなります。Hibernate側でもSQLを出力したり出来ますが、プリペアド・ステートメントを使用しているかなのかちょっとわかりませんが、SQLの一部が?とかなってしまいます。H2側で出力するとこのあたいも見れます。ただし、かなり大量にログができます。

...
2011-03-27 17:29:31,113 ["http-bio-8080"-exec-9] DEBUG h2database - jdbc[3] 
/**/PreparedStatement prep1 = conn1.prepareStatement("SELECT username, role as authority FROM user WHERE username = ?");
2011-03-27 17:29:31,113 ["http-bio-8080"-exec-9] DEBUG h2database - jdbc[3] 
/**/prep1.setString(1, "yamkazu");
2011-03-27 17:29:31,113 ["http-bio-8080"-exec-9] DEBUG h2database - jdbc[3] 
/**/ResultSet rs42 = prep1.executeQuery();
2011-03-27 17:29:31,113 ["http-bio-8080"-exec-9] INFO  h2database - jdbc[3] 
/*SQL l:63 #:1*/SELECT username, role as authority FROM user WHERE username = ? {1: 'yamkazu'};
...

出力にはslf4jが使われています。
http://www.h2database.com/html/features.html#logging_recovery

DEBUGだと大量にでるので、ロガー側の設定で出力レベルを調整するといいかもしません。