log4net无法将数据插入自定义列

log4net无法将数据插入自定义列,log4net,Log4net,为基本lognet列编写db很好,但我添加了另一个名为“clientIp”的列,并将数据设置为Ilog对象bofore log,但它将与消息列相同的数据写入ClintIp列。。这里是我的配置文件和数据库截图: <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> ... <commandText value="INSERT INTO Log ([Date],[Thr

为基本lognet列编写db很好,但我添加了另一个名为“clientIp”的列,并将数据设置为Ilog对象bofore log,但它将与消息列相同的数据写入ClintIp列。。这里是我的配置文件和数据库截图:

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      ...
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[ClientIp]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @clientip)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
     ...
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
      <parameter>
        <parameterName value="@clientip" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout" />
      </parameter>
    </appender>
这里有什么问题

编辑:
很明显,它使用for message和clientip编写数据库,并使用给定的参数:for exmp:log.Error('您的Ip为::1');如何告诉log4net对ClientIp列使用log4net.LogicalThreadContext.Properties[“ClientIp”]对消息列使用log.error(message)

您的代码不正确,应该是:

public static void Error(object msg, string userip)
    {
        log4net.LogicalThreadContext.Properties["ClientIp"] = userip;
        if (log.IsErrorEnabled)
        {
            log.Error(msg); //<----Here is your error
        }
    }
公共静态无效错误(对象消息,字符串userip)
{
log4net.LogicalThreadContext.Properties[“ClientIp”]=userip;
if(log.iserror已启用)
{

log.Error(msg);//如果这对其他人有帮助,我也遇到了同样的问题:我添加的列中的数据在消息列中“有点”重复

例如,我只是简单地将“访问主页”作为消息记录,我添加的列中显示了“访问主页”

我的第一个错误是布局类型后面有一个value属性:

从上面删除value属性可以防止数据在添加的列中重复,但现在该列为null

我的第二个错误是,出于某种未知的原因,log4net不喜欢“machinename”。我不知道问题是列名还是参数名,但我将“machinename”的所有实例都更改为“server”(当然包括在DB中重命名列),所有这些都开始工作

编辑


好的,我想我刚刚意识到问题是属性值区分大小写,所以我使用了.Properties[“MachineName”],但应该使用.Properties[“MachineName”]。

我不明白,那么如何将日志发布到db?你的意思是我不应该将参数传递给log.Error()函数。但它需要参数(非参数函数不重载)…我应该做什么编辑,但仍然相同..消息和客户端ip数据都有msg datasee edit,我为像你这样的专栏作家添加了转换模式,这就是我喜欢这份工作和stackoverflow的原因!!谢谢!
public static void Error(object msg, string userip)
    {
        log4net.LogicalThreadContext.Properties["ClientIp"] = userip;
        if (log.IsErrorEnabled)
        {
            log.Error(msg); //<----Here is your error
        }
    }
<parameter>
    <parameterName value="@clientip" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout" >
          <conversionPattern value="%property{ClientIp}" />
    </layout>
  </parameter>