Oracle10g log4net AdoNetAppender消息失败>;2000字符

Oracle10g log4net AdoNetAppender消息失败>;2000字符,oracle10g,log4net,Oracle10g,Log4net,我正面临着一个AdoNetAppender的麻烦。对于长度高达2000个字符的消息,一切正常。如果消息(PI_S_消息)大于2000个字符,则所有内容都会崩溃。我的数据库是Oracle 10g,下面显示的是appender配置。在初始化appender时,动态注入Connect字符串 <?xml version="1.0" encoding="utf-8" ?><log4net> <appender name="MyAppender" type="log4net.A

我正面临着一个AdoNetAppender的麻烦。对于长度高达2000个字符的消息,一切正常。如果消息(PI_S_消息)大于2000个字符,则所有内容都会崩溃。我的数据库是Oracle 10g,下面显示的是appender配置。在初始化appender时,动态注入Connect字符串

<?xml version="1.0" encoding="utf-8" ?><log4net>
<appender name="MyAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="0" />
  <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />      
  <commandText value="INSERT INTO LOG_TABLE(Datetime,Log_Level,userid,Message,machine) VALUES (:PI_D_DATE, :PI_S_LEVEL, :PI_S_USERID, :PI_S_MESSAGE, :PI_S_MACHINE)" />      
  <parameter>
    <parameterName value=":PI_D_DATE" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{dd-MMM-yyyy HH:mm:ss}" />
    </layout>
  </parameter>     
  <parameter>
    <parameterName value=":PI_S_LEVEL" />
    <dbType value="String" />
    <size value="10" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>     
  <parameter>
    <parameterName value=":PI_S_USERID" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%u" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":PI_S_MESSAGE" />
    <dbType value="String" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":PI_S_MACHINE" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{log4net:HostName}" />
    </layout>
  </parameter>
</appender>
<root>
  <level value="All"/>
  <appender-ref ref="MyAppender"/>
</root>

有人能帮忙吗?

PI\u消息的
dbType
属性更改为
AnsiString
。 当将dbType用作
String
时,它可能正在尝试使用
nvarchar
绑定

尽管不相关,但这条线救了我的命。

新配置如下

<?xml version="1.0" encoding="utf-8" ?><log4net>
<appender name="MyAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="0" />
  <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />      
  <commandText value="INSERT INTO LOG_TABLE(Datetime,Log_Level,userid,Message,machine) VALUES (:PI_D_DATE, :PI_S_LEVEL, :PI_S_USERID, :PI_S_MESSAGE, :PI_S_MACHINE)" />      
  <parameter>
    <parameterName value=":PI_D_DATE" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{dd-MMM-yyyy HH:mm:ss}" />
    </layout>
  </parameter>     
  <parameter>
    <parameterName value=":PI_S_LEVEL" />
    <dbType value="String" />
    <size value="10" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>     
  <parameter>
    <parameterName value=":PI_S_USERID" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%u" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":PI_S_MESSAGE" />
    <dbType value="AnsiString" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":PI_S_MACHINE" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{log4net:HostName}" />
    </layout>
  </parameter>
</appender>
<root>
  <level value="All"/>
  <appender-ref ref="MyAppender"/>
</root>

我认为这是针对Oracle的Microsoft.NET提供程序中的一个错误。我在这里解释了我的发现:
<?xml version="1.0" encoding="utf-8" ?><log4net>
<appender name="MyAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="0" />
  <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />      
  <commandText value="INSERT INTO LOG_TABLE(Datetime,Log_Level,userid,Message,machine) VALUES (:PI_D_DATE, :PI_S_LEVEL, :PI_S_USERID, :PI_S_MESSAGE, :PI_S_MACHINE)" />      
  <parameter>
    <parameterName value=":PI_D_DATE" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{dd-MMM-yyyy HH:mm:ss}" />
    </layout>
  </parameter>     
  <parameter>
    <parameterName value=":PI_S_LEVEL" />
    <dbType value="String" />
    <size value="10" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>     
  <parameter>
    <parameterName value=":PI_S_USERID" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%u" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":PI_S_MESSAGE" />
    <dbType value="AnsiString" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value=":PI_S_MACHINE" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{log4net:HostName}" />
    </layout>
  </parameter>
</appender>
<root>
  <level value="All"/>
  <appender-ref ref="MyAppender"/>
</root>