log4net AdoNetAppender не находит файл библиотеки для ODBC - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь использовать AdoNetAppender log4net для записи записи в таблицу истории событий. Мы используем ODBC, потому что у нас есть клиенты с различными системами баз данных, и ODBC достаточно для наших нужд. Однако я не могу подключиться к своей базе данных. Вот мой файл конфигурации:

<?xml version="1.0" encoding="utf-8"?>
<log4net>

  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date - %message%newline" />
    </layout>
  </appender>
  <appender name="OdbcLogger" type="log4net.Appender.AdoNetAppender">
      <connectionType value="System.Data.Odbc.Connection, System.Data"/>
      <connectionString value="Dsn=Algoma;Server=localhost;Port=5432;uid=anneal;pwd=anneal" />
    <bufferSize value="1" />
      <commandText value="INSERT INTO event_history (description) values (?)" />
      <parameter>
        <parameterName value="message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="ConsoleAppender" />
    <appender-ref ref="OdbcLogger" />
  </root>

</log4net>

У меня включена внутренняя отладка log4net. Вот сообщение об исключении, которое я получаю:

log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Failed to load connection type [System.Data.Odbc.Connection, System.Data]
System.IO.FileNotFoundException: Could not load file or assembly 'System.Data' or one of its dependencies. The system cannot find the file specified.
File name: 'System.Data'
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
   at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   at System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Util.SystemInfo.GetTypeFromString(String typeName, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Appender.AdoNetAppender.ResolveConnectionType()

Может кто-нибудь подсказать, что я делаю неправильно? Или, может быть, покажите мне пример использования AdoNetAppender для записи в базу данных через ODBC?

Большое спасибо

1 Ответ

0 голосов
/ 07 ноября 2019

Я заставил его работать, указав номер версии, открытый ключ и культуру:

<appender name="OdbcLogger" type="log4net.Appender.AdoNetAppender">
      <connectionType value="System.Data.Odbc.OdbcConnection, System.Data, Version=4.0.30319.18020,publicKeyToken=b77a5c561934e089,culture=neutral"/>
      <connectionString value="Dsn=Algoma;Server=localhost;Port=5432;uid=anneal;pwd=anneal" />
    <bufferSize value="1" />
      <commandText value="INSERT INTO event_history (description) values (?)" />
      <parameter>
        <parameterName value="message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>

Мне было интересно, как найти открытый ключ, кроме случая, в поиске Google, как я нашелЭто. Я обнаружил, что Gacutil скажет мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...