Log4Net和额外字段

时间:2009-11-25 07:49:02

标签: .net log4net

是否可以在数据库中插入额外的字段并在log4net中使用它们?我有一个UserId我希望在log-table的额外字段中。

我在log4net.config中添加了字段:

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

但是如何更新ILog接口以支持额外的数据库字段。所以我可以记录:

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

2 个答案:

答案 0 :(得分:20)

您可以使用log4net中的“上下文”功能。基本上,它允许您设置可以在日志追加器中使用的属性。您可以在不同的范围(全局,线程等)设置这些属性。在你的情况下,我认为你可以去(例如,在用户登录后):

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

在配置文件中,您可以使用此属性并将其添加到日志记录追加程序。我认为AdoNetAppender

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

请注意,我没有编译上面的任何片段,所以他们可能需要一些调整,但它应该让你大致了解如何解决这个问题。

您可以阅读有关此here的更多信息。

聚苯乙烯。我认为第一个答案中提到的MDC.Set已经过时了。

答案 1 :(得分:2)

我认为您必须使用MDC.Set来设置额外的上下文值。检查Tip #4 in this blog