6

我在我的 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 属性正在设置,但它们没有进入数据库。

我怎样才能让它工作?

4

2 回答 2

10

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

原来的:

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

改变:

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

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

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

于 2008-10-09T19:08:30.643 回答
0

你能打开 log4net verbose/debug/show sql 看看它在那个级别做了什么吗?是否可能需要其他一些配置才能将它们捆绑在一起?

于 2008-10-09T14:09:41.167 回答