2011-03-19 69 views
0

我正面临AdoNetAppender的麻烦。对于长达2000个字符的消息,事情可以正常工作。如果消息(PI_S_MESSAGE)大于2000个字符,则一切都会崩溃。我的数据库是Oracle 10g,下面显示的是appender配置。连接字符串在初始化appender时即时注入。log4net AdoNetAppender邮件失败> 2000字符

<?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> 

在启用调试模式,它泵出一个Oracle错误

log4net:ERROR [AdoNetAppender] Exception while writing to database 
System.Data.OracleClient.OracleException: ORA-01461: can bind a LONG value only for insert into a LONG column 

    at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc) 

是否有人可以帮忙吗?

+0

我认为这是Microsoft .NET Provider for Oracle中的一个错误。我解释了我在这里发现的:http://stackoverflow.com/questions/9156019/ora-01461-can-bind-a-long-value-only-for-insert-into-a-long-column-occurs-当/ 29637314#29637314 – Markus1980Wien 2015-04-14 21:15:57

回答

0

通过将PI_S_MESSAGE参数的dbType属性更改为AnsiString来固定。 也许它是在与dbType一起使用时尝试nvarchar绑定为String

事情没有关系,这个线程救了我的屁股。 https://forum.hibernate.org/viewtopic.php?p=2369841

新的配置如下。

<?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>