log4net AdoNetAppender не работает для сообщений> 2000 символов - PullRequest
0 голосов
/ 19 марта 2011

У меня проблема с AdoNetAppender. Все работает нормально для сообщений длиной до 2000 символов. Все разваливается, если сообщение (PI_S_MESSAGE)> 2000 символов. Моя база данных - Oracle 10g, и ниже показана конфигурация appender. Строка подключения вводится на лету, при инициализации аппендера.

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

Когда включен режим отладки, выдает ошибку оракула

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)

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 19 марта 2011

Исправлено путем изменения атрибута dbType для параметра PI_S_MESSAGE на AnsiString. Возможно, он пытался связать nvarchar при использовании с dbType как 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...