2009-11-25 58 views
12

是否有可能在數據庫中插入額外的域並在log4net中使用它們?我有一個UserId我想在log-table的額外領域。Log4Net和額外的域

我已經加入該領域的log4net.config

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.RawPropertyLayout" /> 
</parameter> 

但是我怎麼更新ILog接口,支持額外的數據庫字段。所以我可以例如日誌:

log4net.LogManager.GetLogger("logname").Fatal(message, exception, userid); 

回答

19

您可以使用log4net中的「上下文」功能。基本上它允許你設置你可以在日誌appender中使用的屬性。您可以在不同的作用域(全局,線程等)設置這些屬性。你的情況,我認爲你可以去(用戶已登錄的情況下,只是後):

log4net.ThreadContext.Properties["userid"] = userid; 

在配置文件中,然後你可以使用這個屬性,並將其添加到日誌的appender。我認爲這將是這樣的AdoNetAppender

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{userid}" /> 
    </layout> 
</parameter> 

請注意,我還沒有編制上述任何片段的,所以他們可能需要一些調整,但它應該給你如何在一個總體思路解決。

您可以閱讀更多關於此here

Ps。我認爲在第一個答案中提到的MDC.Set已經過時了。