外部リソース (DB、Web サービス呼び出しなど) を使用する私のプロジェクトのすべてのメソッドは、ログを記録する必要があります。問題は、何らかの形で重複したコードが大量に発生することです。文は同じように見えますが、パラメーターが異なります (つまり、メソッド名)。
これは、コードをリファクタリングするための非常に良いポイントのようです。AOP ライブラリとは別に、少なくともマジック ストリングを回避し、使い捨てオブジェクトを記述して、次のように using ステートメント内にメソッド本体をラップする方法を考えていました。
public void LoggedMethod(int param)
{
using (new AutoLog())
{
// do whatever needs to be done
}
}
私AutoLog
のクラスは破棄可能で、インスタンス化と破棄の時点でログ呼び出しを書き込みます。これにはクラスを(悪用) 使用できる可能性が高いことはわかってStackTrace
いますが、この特定のクラスは非常に遅いため、これによりメソッドが大幅に遅くなる可能性があります。
私のログエントリは次のようになります(もちろん、すべてにメソッド名が含まれています):
- メソッド呼び出しの開始
- メソッド呼び出しの終わり
- (オプション) メソッドのパラメータ - もちろんシリアル化 (JSON?)
- (オプション) 実行時間
質問
AutoLog
できるだけ速く動作するようにクラスを実装するにはどうすればよいですか? メソッドのパラメーターも読み取ることができれば、さらに良いので、それらをシリアル化してログに記録することもできます。