63

log4net をいじって、NDC と呼ばれるコンテキスト ラベルのスレッドごとのスタックを使用する可能性を見てきました。

このスタックにプッシュされたラベルは、%xまたは%ndcformat パラメーターを指定して PatternLayout に表示されます。

使用法は次のようなものです。

ILog log = log4net.LogManager.GetLogger(...) ;

//pattern layout format: "[%ndc] - %message%newline"

log.Info("message 1"); 
using(log4net.NDC.Push("context")
{
    using(log4net.NDC.Push("inner_context")
    {
      log.Info("message 2"); 
    }
    log.Info("message 3"); 
}
log.Info("message 4"); 

出力は次のようになります。

null - message 1
context inner_context - message 2
context - message 3
null - message 4

log4net でのプログラミング経験の中で、この機能が役立つと感じたのはいつですか?

4

4 に答える 4

25

ASP.NETなどのサーバーアプリケーション。

たとえば、現在のリクエストに関する情報をNDCにプッシュできます。

于 2008-12-02T16:51:12.740 に答える
20

これらの機能は、通過するログが多数ある場合に便利です。大量のログを取得するのはいつですか? インターリーブ出力のある本番システムでの奇妙なバグの診断。より多くのコンテキストを持つことで、出力をフィルタリングしたり、不要なログを出力しないようにすることができます。

ネストされたコンテキストが役立つもう 1 つのケースは、メソッドまたは一部の機能が異なるコンテキストで複数回呼び出され、それらを区別する方法が必要な場合です。

于 2008-12-02T16:02:52.853 に答える