2019年の更新:log4jdbcは2015年以降維持されていません。p6spyはまだ積極的に維持されているようです。
元の回答
この目的で利用できるスパイフレームワークはたくさんあります。log4jdbcを確認してください。これがあなたが探しているものです。
機能
- JDBC3およびJDBC4の完全サポート!
- 設定は簡単です。ほとんどの場合、必要なのはドライバークラス名tonet.sf.log4jdbc.DriverSpyを変更し、既存のjdbc urlの前に「jdbc:log4」を追加してログカテゴリを設定するだけです。行く!
- ログ出力では、プリペアドステートメントの場合、バインド引数がSQL出力に自動的に挿入されます。これにより、多くの場合、読みやすさとデバッグが大幅に向上します。
- SQLタイミング情報を生成して、SQLステートメントの実行にかかる時間を特定し、実行速度が遅すぎるステートメントを特定します。このデータを付属のツールで後処理して、プロファイリングレポートデータを生成し、SQLの速度が遅いことをすばやく特定できます。アプリケーション。
- SQL接続番号情報は、接続プーリングまたはスレッド化の問題を特定するのに役立つように生成されます。基盤となるJDBCドライバー、JDK 1.4以降、およびSLF4J1.xで動作します。
- ビジネスフレンドリーなApache2.0ライセンスの下でライセンスされたオープンソースソフトウェア
使用法
- log4jdbc jar(JDKバージョンに基づく)をアプリケーションのクラスパスに配置します。
- 使用するロギングシステムを選択します。log4j、logback、commonslogging..etcがサポートされています
- アプリケーションの構成でJDBCドライバークラスをnet.sf.log4jdbc.DriverSpyに設定します。多くの場合、スパイされている基になるドライバーは、追加の構成なしで自動的にロードされます。
-
使用している通常のjdbcURLの前にjdbc:log4を追加します。
たとえば、通常のjdbc url isjdbc:derby:// localhost:1527 // db-derby-10.2.2.0-bin / databases / MyDatabasethenの場合、次のように変更します:jdbc:log4jdbc:derby:// localhost:1527 / /db-derby-10.2.2.0-bin/databases/MyDatabase
-
ロガーを設定します。
jdbc.sqlonly :SQLのみをログに記録します。プリペアドステートメント内で実行されたSQLは、そのバインド引数がその位置でバインドされたデータに置き換えられて自動的に表示されるため、読みやすさが大幅に向上します。 1.0
jdbc.sqltiming :SQLの実行にかかった時間に関するタイミング統計を含む、実行後のSQLをログに記録します。 1.0
jdbc.audit :ResultSetを除くすべてのJDBC呼び出しをログに記録します。これは非常に大量の出力であり、特定のJDBCの問題を追跡しない限り、通常は必要ありません。 1.0
jdbc.resultset :ResultSetオブジェクトへのすべての呼び出しがログに記録されるため、さらに大量になります。 1.0
jdbc.connection :接続のオープンイベントとクローズイベントをログに記録し、開いているすべての接続番号をダンプします。これは、接続リークの問題を見つけるのに非常に役立ちます。