Ведение журнала с использованием ORM (log4net и OpenAccess)

Основываясь на предыдущем опыте и исследованиях, я реализовал ведение журнала на рабочем месте с помощью log4Net.

Тем не менее, когда на наших встречах по разработке был представлен log4net, было общее предпочтение использовать настраиваемый регистратор. Причина заключалась в том, чтобы использовать сгенерированный код из ORM Telerik вместо указания запроса на вставку в файле конфигурации.

<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
   <bufferSize value="1"/>
   <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
   <connectionStringName value="Test"/>
   <commandText value="INSERT INTO Log (UniqueId,Date,UserId,Thread,level,Logger,Message,Exception)     VALUES (UUID(),?log_date,?userid,?thread,?log_level,?logger,?message,?exception)" />
   ...

Что вы посоветуете? Можем ли мы создать для этого специальный аппендер? Стоит ли нам использовать собственный регистратор?

Для информации: есть положительные и отрицательные мнения о пользовательских регистраторах здесь.

Спасибо


person Nishzone    schedule 09.03.2013    source источник


Ответы (1)


Вы можете создать собственный журнал, и он может использовать любой механизм, который вам нравится, для ведения журнала. Лично я нашел AdoNetAppender отлично работающим.

Однако, поработав с поддержкой корпоративных операций, я настоятельно рекомендую вам использовать метод наименьшего импеданса для регистрации ваших сообщений. Журналы используются при отладке производственных систем. Я бы не стал писать аппендеры ради «согласованности шаблонов доступа к базе данных».

Если у вас есть проблемы с базой данных, ORM, ОС или сетью, последнее, что вам нужно, это чтобы ваш регистратор не работал. Файл, сообщения отладки Windows и ведение журнала ETW - это то, что я рекомендую в первую очередь, и это можно сделать резервную копию с помощью ведения журнала БД, и, чтобы сделать его более безопасным, я бы поместил журнал БД как минимум в другой БД, чтобы не повлиять на ваше производство системы. Желательно, чтобы это было на локальном сервере, где сетевое соединение не играет роли.

Изменить:

Если вы действительно хотите, вы можете унаследовать класс от AdoNetAppender, а затем переопределить свойство CommandText, чтобы оно было настраиваемым. Здесь есть пример, который я не могу разместить, он делает это с помощью строки подключения.

person Preet Sangha    schedule 09.03.2013
comment
Когда вы говорите «любой механизм», могу ли я использовать AdoNetAppender без указания запроса на вставку в файле конфигурации? Хотелось бы функциональности / производительности Log4Net и удовлетворения требований команды. Спасибо за предложение. Я проведу небольшое исследование и рассмотрю другую базу данных. - person Nishzone; 10.03.2013
comment
Да, я видел примеры, в которых вы можете переопределить строку подключения. Он использовался до того, как у log4net появилось свойство connectionStringName. Я рассматривал возможность использования того же метода для командного текста, но он по-прежнему не будет использовать сгенерированные объекты передачи данных, которые требовались команде. Пользовательский регистратор, кажется, сейчас единственное решение. - person Nishzone; 10.03.2013