2012-12-05 38 views
4

我能夠使用ADONetAppender設置log4NET,並且當我通過log.Info(消息)登錄消息時要捕獲事物狀態時,所有工作都正常。Log4NET,ADONetAppender和自定義字段

由於我將根據在整個應用程序中更改的ActionID從應用程序中的各個位置進行日誌記錄,因此如何擴展事件以便我可以發出諸如log.Info(ActionID,message)之類的調用ActionID結束在數據庫中?

+0

有關調用log.info如何(的String.Format( 「{0}:{1}」,ActionID,消息)); – Sunny

回答

0

嘗試通過包裝info方法創建自定義函數。

void InfoLog(int ActionID, string message) 
{ 
    log.info(String.Format("{0}:{1}",ActionID.ToString(),message)); 
} 
+0

這會使ADONetAppender訪問ActionID參數嗎?最終,ActionID需要結束於它自己的數據庫領域。 –

+0

不,它只是將actionid附加到正在記錄的消息。 – Sunny

+0

我需要類似以下內容:log.info(5,「我的消息」)將5存儲在我的數據庫的statusID字段中,並將「my message」存儲在數據庫的消息字段中。我已經在這個log.info(消息)中工作並且跟蹤了相關信息,但是我需要log.info(value,message)將值發佈到db。這可能在log4net中。 –

7

您可以添加自定義字段通過做這樣的事情打電話log.Info()之前使用GlobalContext.Properties到log4net的:

GlobalContext.Properties["ActionID"] = ActionID; 

然後,在你ADONetAppender配置,你可以用%property{ActionID}訪問該自定義字段。

4

我認爲@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"); 
相關問題