唐紅に水くくるとは

通年チョコミントを食べたい

log4jdbc+slf4jでJDBC周りのログを出す

タイトルまま。
log4jだけだとPrepareStatement.addBatch()のログが出ないので、
出せるように修正。

いいなと思ったのは、既存のlog4jの設定には手を加えなくてもいいこと。
(追記は必要。)

必要なライブラリ:
log4jdbc4-1.2.jar
slf4j-api-1.7.7.jar
slf4j-log4j12-1.7.7.jar
(mavenつかってればpom書けばいいんだけどなぁ…)

jdbc設定の修正
今はoracleを使ってるので、jdbcの設定は以下のような感じ。

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@host:1521/sid

それを、こう。

driver=net.sf.log4jdbc.DriverSpy
url=jdbc:log4jdbc:oracle:thin:@host:1521/sid

ドライバ名は、JDBC接続文字列から勝手に判定してくれてるのかな。
とくに設定する必要はありませんでした。

log4j.propertiesに以下を追記

log4j.logger.jdbc.audit=DEBUG, consoleLog
log4j.additivity.jdbc.audit=false
 
log4j.logger.jdbc.resultset=DEBUG, consoleLog
log4j.additivity.jdbc.resultset=false
 
log4j.logger.jdbc.sqlonly=DEBUG, consoleLog
log4j.additivity.jdbc.sqlonly=false
 
log4j.logger.jdbc.sqltiming=DEBUG, consoleLog
log4j.additivity.jdbc.sqltiming=false
 
log4j.logger.jdbc.connection=DEBUG, consoleLog
log4j.additivity.jdbc.connection=false
 
log4j.logger.log4jdbc.debug=OFF, consoleLog
log4j.additivity.log4jdbc.debug=false

出たログを見た感じ、今は[audit]と[sqltiming]があれば十分っぽい。
auditでPrepareStatementのログを出してくれて、
sqltimingで実際に発行するSQLを出してくれる。
なお、アプリケーションログの設定があれば、そちらも変わりなく出力される。