ADONetAppender を使用して log4NET をセットアップすることができ、log.Info(message) を介してメッセージをログに記録するときに状態をキャプチャしたい場合、すべて正常に動作します。
アプリケーション全体で変化する ActionID に基づいてアプリケーションのさまざまな場所からログを記録するため、代わりに log.Info(ActionID, message) などの呼び出しを発行できるように拡張するにはどうすればよいですか。データベース?
ADONetAppender を使用して log4NET をセットアップすることができ、log.Info(message) を介してメッセージをログに記録するときに状態をキャプチャしたい場合、すべて正常に動作します。
アプリケーション全体で変化する ActionID に基づいてアプリケーションのさまざまな場所からログを記録するため、代わりに log.Info(ActionID, message) などの呼び出しを発行できるように拡張するにはどうすればよいですか。データベース?
次のようにして、GlobalContext.Properties
呼び出す前にカスタム フィールドを log4net に追加できます。log.Info()
GlobalContext.Properties["ActionID"] = ActionID;
次に、ADONetAppender 構成で、このカスタム フィールドに%property{ActionID}
.
@bcwood はおそらく、単に GlobalContext.Properties を使用してログに記録する ID を格納するための最良/最も簡単なアイデアを持っていると思います。
ただし、ID が非常に重要であり、ID の設定を合理化したい場合 (さまざまなロギング メソッドにパラメーターを追加するのではなく、GlobalContext で ID 値を設定するために別の呼び出しを追加する必要があるなど)、次に、log4net リポジトリのこのフォルダーを確認します。
http://svn.apache.org/viewvc/logging/log4net/trunk/extensions/net/1.0/log4net.Ext.EventID/cs/src/
これには、log4net ロガーを拡張して「EventID」パラメーターを追加する方法の例が含まれています。
私にはかなり複雑に思えます (log4net ロガーをサブクラス化し、独自の LogManager を作成してロガーを分配するなど)。
log4net をラップし、log4net のロガーを内部的に使用してログを記録することを選択した場合は、おそらくもう少し単純にすることができます。
上記でリンクしたアプローチ (または、log4net の Logger をラップする同様の、しかしより単純なアプローチ) を使用する利点は、ロギング呼び出しサイトが提案したように見えることです。
logger.Info(123, "Hello");
logger.Info(321, "Good bye");
@bcwood の提案と比較すると、ロギング呼び出しサイトは次のようになります。
GlobalContext.Properties["ActionID"] = 123;
logger.Info("Hello");
GlobalContext.Properties["ActionID"] = 321;
logger.Info("Good bye");
infoメソッドをラップしてカスタム関数を作成してみてください。
void InfoLog(int ActionID, string message)
{
log.info(String.Format("{0}:{1}",ActionID.ToString(),message));
}