log4net没有记录ThreadContext

时间:2008-10-09 13:40:38

标签: asp.net log4net

我在我的AsP.NET网站上运行了log4net。我能够将消息记录到我的数据库表,但它没有记录ThreadContext属性。例如:

ThreadContext.Properties["Url"] = HttpContext.Current.Request.Url.ToString();
ThreadContext.Properties["HttpReferer"] = HttpContext.Current.Request.ServerVariables["HTTP_REFERER"];

我的log4net.config将这些值作为参数添加到我的SQL DB表中:

<parameter>
    <parameterName value="@URL"/>
    <dbType value="String"/>
    <size value="512"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{log4net:Url}"/>
    </layout>
</parameter>
<parameter>
    <parameterName value="@HttpReferer"/>
    <dbType value="String"/>
    <size value="512"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{log4net:HttpReferer}"/>
    </layout>
</parameter>

在调试时,我看到正在设置那些ThreadContext属性,但它们没有进入数据库。

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:8)

所以,事实证明配置是罪魁祸首。这有点不对劲:

原件:

<conversionPattern value="%property{log4net:HttpReferer}"/>

更改:

<conversionPattern value="%property{HttpReferer}"/>

我不得不取出房产内的“log4net:”。

奇怪的是,一个属性仍需要log4net:propertyName。我完全不知道为什么它会以这种方式工作,但这是有效的解决方案!

答案 1 :(得分:0)

你能打开log4net verbose / debug / show sql看看它在那个级别做了什么吗?是否需要另外一些配置才能将它们组合在一起?