私のアプリケーションの関数が呼び出されたときにログに記録したいと思います。このようなイベントで呼び出された関数を呼び出してコードを実行する方法はありますか?C#で関数呼び出しをリッスンすることはできますか(つまり、C#関数呼び出しをイベントとして扱いますか)?
もしそうなら、私はどのようにこれを行う方法を見始めますか?
私のアプリケーションの関数が呼び出されたときにログに記録したいと思います。このようなイベントで呼び出された関数を呼び出してコードを実行する方法はありますか?C#で関数呼び出しをリッスンすることはできますか(つまり、C#関数呼び出しをイベントとして扱いますか)?
もしそうなら、私はどのようにこれを行う方法を見始めますか?
log
でメソッドを散らばせたくない場合は、AOP(Aspect Oriented Programming)ライブラリを使用してください。
Hereは、これを示すブログです。
ありがとうございます - 私はアスペクト指向のアプローチを探していて、そのブログは役に立ちます –
ログを目的の場所に直接挿入するだけです。
public class MyClass
{
private ILogger _logger;
public MyClass(ILogger logger)
{
_logger = logger;
}
public void DoSomething()
{
logger.Information("Something happened");
}
}
これは、あなたのクラスへのロギングのニーズをカスタマイズすることができます - あなたはSEQと協調してSerilogのようなものを使用する場合は特に。
私は、Aspect Oriented Loggingのアプローチが本当に便利な意味論的ロギングの経験を得ることができるとは思っていません。
私は、ありがとうございました。 –
あなたは何をしたいですか?パフォーマンスプロファイリング用か、(例えば)関数がx回呼び出されたときに何かを実行したいからですか?
パフォーマンスプロファイリングの場合、Visual Studioを使用している場合、IDEにはプロファイリング機能が組み込まれています。 「デバッグ」メニューには「パフォーマンスプロファイラ」(Alt + F2)があります。アプリケーションでそれを実行すると、呼び出されているもの、実行されている時間、CPUの負荷などの詳細がわかります。
解釈が少し難しいですが、アプリケーションでさまざまな機能を実行するためにどれだけの時間が費やされているかに興味がある場合は、非常に便利です。
関数内のロギングメソッドに呼び出しを追加するだけではどうですか? – mason
私は特定の機能を持っていますが、すべての機能の開始タイムスタンプと終了タイムスタンプを記録すると便利です –