2014-10-10 84 views
1

我正在從Enterprise Library遷移,其Write()api允許我們指定類別,嚴重性,標題和優先級等內容。log4net將自定義數據映射到數據庫中的字段

對於這個特定的例子,我想將一個用戶提供的值分類到數據庫字段中。例如考慮一個在線購物車,我想把[攝像機],[筆記本電腦],[路由器],[帳戶],[訂單],[發貨]等類別。

我知道log4net有一個屬性字段和我們正在做的是已經在我們的配置映射到數據庫:

<parameter> 
    <parameterName value="@MachineName" /> 
    <dbType value="String" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%property{log4net:HostName}" /> 
    </layout> 
</parameter> 

我希望我的API是這個樣子:

public class LogService 
{ 
    public LogService() 
    { 
     _log = LogManager.GetLogger(this.GetType()); 
    } 

    public void WriteDebug(string message, string category) 
    { 
    _log.Debug(message); 
    } 
} 

我能做到這一點,那將是安全的?還是有另一種方式?

public void WriteDebug(string message, string category) 
{ 
    ThreadContext.Properties["Category"] = category 
    _log.Debug(message); 
    ThreadContext.Properties["Category"] = ""; 
} 

我們確實有很多的異步代碼在我們的應用程序代碼,所以,我很擔心,這是不是線程安全的。

回答

1

log4net.ThreadContext對於多線程操作是安全的並提供了要存儲的線程特定信息的位置。您還可以在PatternLayout中指定線程ID /名稱,以獲得更好的洞察力。在相同的佈局中提供所有需要的屬性,就像您指定的主機名一樣。 如果要登錄到數據庫,請使用AdoNetAppender

相關問題