2

Log4Net でログを記録する場合、ログを呼び出したクラスをログ ファイルに入れるのは非常に簡単です。これにより、コードをトレースしてクラスのフローを確認するのが非常に簡単になることが過去にわかりました。Log4Net では、次のように変換パターンで %logger プロパティを使用します。

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

これにより、必要な出力が得られます。

2008-09-19 15:40:26,906 [3132] ERROR <b>Log4NetTechDemo.Tester</b> [(null)] - Failed method

出力から、ログを呼び出したクラスが Log4NetTechDemo.Tester であることがわかります。そのため、エラーをそのクラスまで簡単に追跡できます。

Logging Applicaton Block では、単純なログ呼び出しでこれを行う方法がわかりません。どうすればできるか知っている人はいますか?もしそうなら、そのための例または手順は非常に役に立ちます。

4

2 に答える 2

5

呼び出し元のメソッドをLogEntryのExtendedPropertiesディクショナリに追加します。もちろん、フォーマッタテンプレートからExtendedPropertiesトークンを削除していないと仮定します。

このようなものをロギングラッパーに入れます。

public void LogSomething(string msg)
{
  LogEntry le = new LogEntry { Message = msg };
  le.ExtendedProperties.Add("Called from", new StackFrame(1).GetMethod().ReflectedType);
  Logger.Write(le);
}

これを呼び出すと、ログの最後に次のようなものが生成されます。

Extended Properties: Called from - LAB_Demo.Tester
于 2008-09-19T10:24:25.330 に答える
1

StackTrace にアクセスせずに簡単な方法を見つけることはできませんでした。それが例外である場合は、そこから取得するだけです:

 StackTrace trace = new StackTrace(ex, true);
 StackFrame frame = trace.GetFrame(0);

おしゃべりなアイテムの場合は、文字列を書くだけです。挿入時にクラス名を取得できるスニペットがあります。また、クラス名で const 文字列を宣言します。

きれいではありませんが、私たちが見つけた最高のものです。このスレッドで他の誰かが答えてくれることを願っています:)

于 2008-09-19T06:38:11.817 に答える