AdoNetAppender参数的默认值 [英] Default values for AdoNetAppender parameter

查看:103
本文介绍了AdoNetAppender参数的默认值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将log4net与AdoNetAppender一起使用.它将所有日志信息记录到表中.该表实际上有2个Integer列(可以为null).

I am using log4net with AdoNetAppender. It logs all log info into a table. This table actually has 2 Integer columns (can be null).

这是我的log4net配置的相关部分:

Here is the relevant part of my log4net config:

<commandText value="INSERT INTO ActivityLog ([Date],[Thread],[Level],[Logger],[Message],[DealID]) 
                 VALUES (@log_date,@thread,@log_level,@logger,@message,@DealID)" />

 //other parameters hten DealID
<parameter>
      <parameterName value="@DealID" />
      <dbType value="Int32" />
       <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{DealID}" />
      </layout>
    </parameter>

我发现,如果我没有使用log4net.ThreadContext.Properties["DealID"] = DealID;之类的显式设置,则会抛出异常:

What I found out was if I don't explicitly set using something like log4net.ThreadContext.Properties["DealID"] = DealID; it throws me an exception:

System.FormatException occurred
  Message="Failed to convert parameter value from a String to a Int32."
  Source="System.Data"
  StackTrace:
       at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
  InnerException: System.FormatException
       Message="Input string was not in a correct format."
       Source="mscorlib"
       StackTrace:
            at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
            at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
            at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
            at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
            at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
       InnerException: 

我必须将其设置为:

log4net.ThreadContext.Properties["DealID"] = 0;

无论如何,我是否可以在Log4net配置中为此Int32字段设置默认参数值,以便在没有提供值的情况下无需将其显式设置为0?这让我想知道为什么设置为varchar的字段不会发生这种情况(尽管没有提供任何值).

Is there anyway that I can set a default parameter value in my log4net config for this Int32 field so that I don't need to set it explicitly to 0 if no value is supplied? And it makes me wonder why it does not happen to fields which are set as varchar (though no value is supplied to them).

推荐答案

更改您的附加程序:

<parameter>
    <parameterName value="@DealID" />
    <dbType value="Int32" />
    <layout type="log4net.Layout.RawPropertyLayout">  <!-- notice this -->
        <key value="DealID" />  <!-- and notice this instead of the pattern layout -->
    </layout>
</parameter>

值得赞扬的是,我找到了它

And to give credit, I found it from this thread. (And a bunch of other searching trying to do the same thing.

这篇关于AdoNetAppender参数的默认值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆