2009-05-11 17 views
3

誰がいつログを取るのかについての良い情報を持っていますが、私は各C#メソッドを入力して終了するときに別の情報を記録するときにINFOタイプを記録することを考えていました..log4netログをとるには?

これは良いと悪いと考えられますか?私はパフォーマンスヒットを見ますか?私は方法を入力したときにINFOを記録した場合は

、アイデアは、メソッド名を記録するようになり、すべての変数とは、これはそれぞれの値と名前を入力しなくても自動的に行うことができるか

任意のアイデア値方法、私は反射を使用することができると思うかもしれないが、多分私はここで減速が表示されますか?

リフレクションが遅くなる場合は、プログラムが失敗したときに "REFLECTION"ビットを使用してスタックトレース、すべての値、値を書き込むことができます。この上

任意のアイデアや例は本当に

おかげ

答えて

6

メソッドレベルのログには、AOP(Aspect oriented programming)スタイルのロギングを使用できます。

Log4PostSharpと呼ばれる優れたフレームワークがあります。 - それはlog4netのに利用できるかどうTRACE(

[Log(LogLevel.Info, "Doing something")] 
public void CountCharacters() { 
    // do your logic here 
} 
+0

それについて知らなかった..私はそれが好きです。同じことをする独自の属性を書くことさえできます。 +1 –

+0

これは今私が使用している..ありがとう... –

1

私はあなたが生産にログインしたいと思いますもののためDEBUGではなくINFO、および予備INFOを使用するに感謝しています。しかし、それは私の好みです。

パフォーマンスが低下します。ログファイルに書き込む必要があり、すべてのI/Oはパフォーマンス上の問題です。

私は個人的に似たようなことにリフレクションを使用しますが、パフォーマンスにも影響します。スタック上の前の項目を取り出し、その中から記述を作成するリフレクションメソッドを使用して、すべてを実装することができます。それからどこからでも呼び出すことができます。

これを実行したら、プロファイラを実行して実際にパフォーマンスの問題を引き起こす場所を最適化できます。

ここでは、PropertyChangedの処理方法について説明します。

public string Name 
    { 
     get { return _Name ?? string.Empty; } 
     set 
     { 
      _Name = value; 
      NotifyPropertyChange(MethodBase.GetCurrentMethod()); 
     } 
    } 

    private void NotifyPropertyChange(MemberInfo info) 
    { 
     NotifyPropertyChange(info.Name.Replace("set_", string.Empty)); 
    } 

    private void NotifyPropertyChange(string property) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
    } 
+0

+1:ほとんどの場合、デバッグを使用して、プロダクションに移行する際に、わずかな量の情報、およびアプリが生成する警告やエラーを簡単に取り除くことができます。 –

2

私はこのためにさらに低いレベルを使用します。それは基本的にこのような属性を持つあなたの方法を飾るに帰着log4netの

に書き込むPostSharpのプラグインです)。 DEBUGは何かの特定の機会を記録するのに適していますが、TRACEはメソッド呼び出し、パラメータ、およびこのようなものをダンプするのに適しています。間違いなくINFOであり、高レベルで機能的なものを記録するのに適しています。