1

log4net と Castle Windsor LoggingFacility を使用して、ログが必要なクラスに ILogger インスタンスを挿入しています。ロガーは次のように登録されます:-

container.AddFacility<LoggingFacility>(f => f.UseLog4Net());

また、ログが必要なクラスでは、Windsor が挿入する次のプロパティを作成します。

public ILogger Logger { get; set; }

すべて正常に動作していますが、メソッドのエントリと終了をトレースできるように、このロギングを何らかの形で拡張したいと考えています。Castle Windsor の前は、log4net のラッパーを作成し、TraceEnter() や TraceExit() などのメソッドを追加していました。これらは、StackTrace クラスから現在のメソッド名を取得し、Log.Debug("Entered method Foo");を実行します。

Castle Windsor のロギング機能を拡張してこれを実現する最善の方法がわかりません。何か案は?

編集:

独自のカスタム ロガー ファクトリ (Log4netFactory から継承) とカスタム ロガー (Log4netLogger から継承し、Trace... メソッドを含む) を作成し、次のように Windsor に登録しました。

container.AddFacility<LoggingFacility>(f => f.LogUsing<CustomLoggerFactory>());

残念ながら、クラスで ILogger 型のパブリック プロパティを公開する必要があります。そうしないと、Windsor はロガーを挿入しません。これをカスタム ロガーにキャストできますが、あまりエレガントではありません。

(Logger as CustomLog4NetLogger).TraceEnter();
4

0 に答える 0