是否可以在数据库中插入额外的字段并在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);
答案 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。