2011-07-02 9 views
0

クラスタで分散ログにlog4netを使用しようとしています。log4netログにオブジェクトインスタンスIDを追加する

私のソフトウェアスタックは、一意のインスタンスIDを持つクラスタの周りに広がっている独立したエージェントで構成されています。生成されるログにログを記録する各オブジェクトのインスタンスIDを追加したいが、すべての継承されたクラスがすべてのクラスに静的なロガーを追加するベストプラクティスに従うオブジェクトインスタンスIDに同じ値を使用するようにする鉱山のも、基本クラスからクラスを継承すれば、それはので、私は、ロガー名を使用することはできません

private static ILog _Log =LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

以下のような独自のロガーを持っています。また、私が作成するすべてのログにオブジェクトインスタンスIDを追加する必要はなく、logn4netログで自動的に実行されます。

私はロガーコンテキストを使用できますが、インスタンスIDはグローバルではなく、特定のスレッドに属していません。これについてどうすればいいですか?

+0

インスタンスIDを各ログメッセージに追加したくないと言っていますか?あなたがそれを望んでいなければ、どこでそれをしたいですか?あなたがそれを望むなら、あなたはログエントリを書くことを試みているあらゆる場所でその価値を得ることができると思いますか? – IAmTimCorey

+0

ログにオブジェクトIDが必要ですが、ログに記録する必要がありますが、問題は異なる継承レベルのログです。私がC:B:Aで、AとBがそれぞれのタイプに基づいて独自のロガーを持っているならば、クラスCのインスタンスを自分のオブジェクトidでログするそのオブジェクトに対して1回、CBまたはAレベルのすべてのログはそのオブジェクトIDを使用しますか? – iCode

答えて

0

何が起きているのかに関するコンテキスト情報を提供するビジネスクラスにネストされた診断コンテキストを追加できます。ログメッセージはNDC情報で充実されます。たとえば、現在のIDをNDCコンテキストに追加すると、ログに記録するとログメッセージが豊富になります。

using(NDC.Push("my context message, and my id is:"+object.id)) 
{ 
    ... all log calls will have 'my context message, and my id is:...' included ... 
} 
関連する問題