Я пытаюсь использовать 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?
Большое спасибо