2009-05-29 9 views
3

私は、トレーシングやロギングが追加されていない.Net(C#)アプリケーションを継承しました。このアプリケーションは、レコードの作成、読み取り、更新、削除のすべてを行います。電子メールを送信し、Webサービスを呼び出します。既存のアプリケーション(ウィンドウまたはWeb)にログを追加する最善の方法.Net

もちろん、ロギングも試しても捕捉機構がないので、それを維持するのは悪夢です(どちらも信じられませんでした)。

このシステムでは、どのような方法でログを記録するのが最適でしょうか。私はすべての関数呼び出しに行き、ロギング行を追加することはできません。私が提供するメソッド名に基づいてログを取ることができる動的なロギングを持つことができる方法はありますか?

I.E. UpdateOrder()が呼び出されると、私のロガーは、ログインする必要があります(更新順メソッドが呼び出された)

あなたは.NETでならここ

+3

言語とプラットフォームの詳細について教えてください。 –

+0

申し訳ありません...それらは.Net 3.5、C#、ASP.Netに組み込まれています – Zeus

答えて

1

PostsharpなどのAOPフレームワークがメソッド呼び出しをログに記録する特定の属性を作成するには:

public class TraceAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { Trace.TraceInformation("Entering {0}.", eventArgs.Method); } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { Trace.TraceInformation("Leaving {0}.", eventArgs.Method); } 
} 

(このコードは、tがあります彼のホームページからの例では)

あなたは、あなたがログインする方法には、この属性を適用することができます

[Trace] 
public void UpdateOrder() 
{ 
    ... 
} 
+0

PostSharpはこの問題の非常に素晴らしいソリューションです。しかし属性にはコードを修正する必要があるという欠点があります。これを行うには、PostCarpのMultiCastAttributeを使用する方がいいでしょう。ここでは、影響を受けるタイプ(またはメソッド)を指定するために1つの属性を指定するだけです。 [assembly:MyOnMethodInvocationAspect( AttributeTargetAssemblies = " AttributeTargetTypes = "System.Threading。*")] は、System.Threading。*(http://doc.postsharp.org/の詳細を参照)の任意のクラスへの呼び出しごとにpostsharpを代行受信します。 –

2

使用log4netのは、それは、Apacheのlog4jの.NETバージョンです。ライブラリは十分にテストされ、どこのプログラマでも使用でき、非常にカスタマイズ可能です。このコードを継承しているので、それを通過してログのサポートを追加することは悪いことではありません。

カスタマイズ設定は、ロギング情報の出力先ごとにロギング情報の場所(電子メール、テキストファイル、コンソール)とどのレベルの冗長性が必要かを指定できるプロジェクト内のグローバルファイルによって処理されます。

関連する問題