2011-02-25 59 views
0

我想在運行時發送任意參數到log4net。是否可以即時定義參數並將它們發送出去?我知道你可以這樣定義全局PARAMS:發送多個參數到log4net

log4net.GlobalContext.Properties["MyColumn"] = "MyValue"; 

,但我的線沿線的思考更多:

myArrayOfCoolStuff["IP"] = "127.0.0.1"; 
myArrayOfCoolStuff["UserName"] = "jbleaux"; 
log.Error(myArrayOfCoolStuff); 

鑑於log4net的如何趨於默默地消失,當你給它的垃圾,我希望找到專業知識而不是僅僅嘗試它。有關如何做到這一點的任何建議?

回答

0

查看此tutorial,尤其是「計算的上下文值」部分。您可以創建一個接受參數的類,並以您需要的任何格式寫入它們。

+0

Neato。有一個請求設置threadContext和另一個請求使用它的asp.net情況下是否存在風險?我擔心用Alice的IP或其他東西來記錄Alice的錯誤。 – 2011-02-28 14:23:43

+0

如果您將信息留在線程上下文中「更長」的時間段,這肯定會成爲問題。但是,您可以將信息存儲在會話中,並在「寫入」(全局)上下文屬性時訪問會話。 – 2011-02-28 14:58:03

+0

我最終在擴展方法中做了這個,只是在日誌對象周圍放上一個鎖(log){},它似乎可以工作。這是一個性能問題,但是這個代碼只能用於異常處理,所以鎖的性能是我們最擔心的。謝謝。 – 2011-02-28 16:31:37