私の現在のプロジェクトの要件の 1 つは、Hibernate または Ibatis によって生成された SQL ステートメントをログに記録し、それらを (SQLServer 上の) 特定のテーブルに保存できるようにすることです。これにより、管理者は戻ってきて、実行されたクエリと実行されたユーザーを確認できます。それらを実行したり、必要に応じてステートメントを再利用したりできます。このアプローチには同意しませんが、これを実現できるライブラリが実際に存在するかどうかを知りたいです。Web アプリケーションに Spring フレームワークを使用しています。
5 に答える
SQL Server のエンタープライズ エディションを使用している場合は、データベース監査を使用してサーバー上で実行できます。または、拡張イベントを使用できます。ORM に言及する必要があるアプリケーション名でフィルタリングするだけです。さらに役立つように、SQL Server のバージョンとエディションをお知らせください。
実装するのは簡単ではありませんが、私は方法を知っています。カスタム DataSource (Apache BasicDataSource のような実際の DataSource のラッパー) を作成します。getConnection 呼び出しをインターセプトし、ターゲット DataSource によって返された Connection をラップします。このラップされた接続は、createStatement / createPreparedStatement 呼び出しをインターセプトし、返された Statements / PreparedStatements をラップします。Statement ラッパーは、SQL 実行をインターセプトしてログに記録できるようになりました。
さらに別の方法として、Hibernate 構成設定で SQL ステートメントのログ記録を有効にし、ログ ファイルからステートメントを "フーバー" することもできます。
しかし、データベースの対話型クエリ ツールを使用して実行されるクエリと更新も取得できるため、データベース サーバー側のソリューションがおそらく最適だと思います。