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を出してくれる。
なお、アプリケーションログの設定があれば、そちらも変わりなく出力される。