我能夠使用ADONetAppender設置log4NET,並且當我通過log.Info(消息)登錄消息時要捕獲事物狀態時,所有工作都正常。Log4NET,ADONetAppender和自定義字段
由於我將根據在整個應用程序中更改的ActionID從應用程序中的各個位置進行日誌記錄,因此如何擴展事件以便我可以發出諸如log.Info(ActionID,message)之類的調用ActionID結束在數據庫中?
我能夠使用ADONetAppender設置log4NET,並且當我通過log.Info(消息)登錄消息時要捕獲事物狀態時,所有工作都正常。Log4NET,ADONetAppender和自定義字段
由於我將根據在整個應用程序中更改的ActionID從應用程序中的各個位置進行日誌記錄,因此如何擴展事件以便我可以發出諸如log.Info(ActionID,message)之類的調用ActionID結束在數據庫中?
嘗試通過包裝info方法創建自定義函數。
void InfoLog(int ActionID, string message)
{
log.info(String.Format("{0}:{1}",ActionID.ToString(),message));
}
這會使ADONetAppender訪問ActionID參數嗎?最終,ActionID需要結束於它自己的數據庫領域。 –
不,它只是將actionid附加到正在記錄的消息。 – Sunny
我需要類似以下內容:log.info(5,「我的消息」)將5存儲在我的數據庫的statusID字段中,並將「my message」存儲在數據庫的消息字段中。我已經在這個log.info(消息)中工作並且跟蹤了相關信息,但是我需要log.info(value,message)將值發佈到db。這可能在log4net中。 –
您可以添加自定義字段通過做這樣的事情打電話log.Info()
之前使用GlobalContext.Properties
到log4net的:
GlobalContext.Properties["ActionID"] = ActionID;
然後,在你ADONetAppender配置,你可以用%property{ActionID}
訪問該自定義字段。
我認爲@bcwood可能具有最簡單的方法來簡單地使用GlobalContext.Properties來存儲您想要記錄的ID。
但是,如果id對您非常重要,並且您想簡化id的設置(例如通過向各種日誌記錄方法添加參數,而不必添加單獨的調用來設置id值的設置GlobalContext),那麼你可能會看看log4net存儲庫中的這個文件夾。
http://svn.apache.org/viewvc/logging/log4net/trunk/extensions/net/1.0/log4net.Ext.EventID/cs/src/
它包含如何擴展log4net的記錄器添加一個「事件ID」參數的例子。
它似乎很相關我(log4net記錄器的子類,創建自己的LogManager來分配你的記錄器等)。
如果您選擇將log4net打包並在內部使用log4net的記錄器進行記錄,那麼您可能會更簡單一些。
使用我聯繫上面的方法(或類似,但更簡單包裝的log4net的記錄器的方法)的優點,那是你的日誌調用網站可以看起來像你建議:
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");
有關調用log.info如何(的String.Format( 「{0}:{1}」,ActionID,消息)); – Sunny