簡體   English   中英

Log4NET,ADONetAppender和自定義字段

[英]Log4NET, ADONetAppender and custom fields

我能夠使用ADONetAppender設置log4NET,並且當我想通過log.Info(message)記錄消息時捕獲事物的狀態時,一切工作正常。

由於我將基於一個在整個應用程序中發生變化的ActionID從應用程序中的各個位置記錄日志,因此如何擴展內容,以便我可以發出諸如log.Info(ActionID,message)之類的調用,而ActionID最終以數據庫?

您可以通過執行以下操作,在調用log.Info()之前,使用GlobalContext.Properties將自定義字段添加到log4net:

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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM