SQL文のトレース

昨日(id:manhole:20031212)のSQLトレースを試してみました。
まずはp6spy。これってJDBCドライバのレイヤでアダプタになるんですね。だから、プログラムの変更は必要なし。
Statement#execute …の場合はそのもののSQL文が、PreparedStatement#execute …の場合はバインド前と後のSQL文が出力されます。これだけの情報が出力されれば充分使い物になります。(他の情報も出力されてるんですけれど、何の情報なのかわからないとゆー (^_^; ぱっと見ではSQL応答時間っぽいが)
※サイトに記載のTomcat向け設定方法がちょっと古くて(Ver3系)"TOMCAT_OPTS"になってますが、Ver4,Ver5系では"CATALINA_OPTS"でOKです。

次にOracleLogクラスのほう。

OracleLog.setLogStream(System.out);
// こちらでも同じ
// OracleLog.setLogWriter(new PrintWriter(System.out));
// ログ出力を止めるにはnullをセットする
// OracleLog.setLogStream(null);

とすると出力されます。(手元にあるJDBCドライバのバージョンが修行僧さんとこと違うようで、OracleLogへのシグニチャが異なります)
が、バインドされる変数のバイト配列まで出力されたりと、思った以上に詳細なログが出るようです。アプリケーション開発者向けと言うよりは、JDBCドライバ開発者向けだと思います。
あ、DB絡みの文字化け調査に使えるかも。

で、結局どちらを使うのかというと、今まで使ってきたお手製のクラスだったりして。。。