Entity Framework と Dapper の両方を使用するアプリケーションがあります。ado.net 接続を介して発行されたすべての SQL をログアウトするカスタム ロガーを提供したいと考えています。これを行う最善の方法は何ですか?
あるいは、それが簡単にできない場合、具体的にどのような困難がありますか?
Entity Framework と Dapper の両方を使用するアプリケーションがあります。ado.net 接続を介して発行されたすべての SQL をログアウトするカスタム ロガーを提供したいと考えています。これを行う最善の方法は何ですか?
あるいは、それが簡単にできない場合、具体的にどのような困難がありますか?
同じチームによって作成された Miniprofiler は、dapper と Entity Framework の両方で動作しますが、後者の iirc にはもう少し作業が必要です。これにより、ADO.NET コマンドのログとプロファイリングの両方が可能になります。ここでは、stackoverflow (およびスタック交換ネットワーク全体) で 24 時間 365 日使用しているため、大規模でもうまく機能します。
SharpPcap APIを利用して、SQL が実行するポートでクライアント IP と SQL サーバー IP の間で確立された接続をリッスンします。その後、正規表現などを実行して SQL コマンドを抽出できます。それらのほとんどは、、、、またはで始まりINSERT
ます。文字列を取得したら、任意のロガーを呼び出し、必要に応じてログに記録します。これをサービスとして実行したり、アプリによって起動された 2 番目のアプリとして実行したり、2 番目のスレッドで最初のアプリ内から実行したりすることもできます。パイプラインよりも少し下にありますが、それによって柔軟性が向上します。サーバー上の SQL プロファイラー/SQL トレースによって受信されたトラフィックをテストおよび比較して、それが機能することを検証できます。UPDATE
SELECT
DELETE
EXEC
ADO
もう 1 つの方法は、ADO.Net コードの関連するセクションを試して変更し、ログを挿入することです。AfterThought https://github.com/vc3/Afterthoughtのようなツールはオプションかもしれませんが、これは、特にホワイト リスト、AV、更新、バージョン管理など、最も管理された環境を除くすべての環境で問題を引き起こしていると思います。
log4net を使用できます: http://www.nuget.org/packages/log4net/
私はこれをいくつかの大きなプロジェクトで使用しています。何を/どこに記録するかを指定できるため、非常に便利です。
SQLステートメントをログに記録したいので、データアクセス層にログを入れることができます。