Как использовать гибкость компонента ведения журнала
Моя команда разрабатывает проект плагинов, в котором работают плагины с координатами хост-приложения (каждый плагин имеет определенную функцию и будет выполняться в отдельном потоке). Я пишу хост-приложение и определяю интерфейс IPlugin; другой разработчик будет ссылаться на мой интерфейс IPlugin и разрабатывать свои плагины.
И у меня возникла проблема: некоторые разработчики используют Nlog для регистрации своей работы над плагином, а другие разработчики используют Log4Net.
Мой вопрос: как позволить каждому плагину использовать компонент журналирования, который ему нравится использовать?
Спасибо!
1 ответ
Скажем, вы делаете интерфейс:
interface ILoggerPlugin
{
void Log(LogInfo info);
}
и класс для всей вашей информации
class LogInfo
{
public string Application;
public Exception LoggedException;
}
Теперь, если вы передадите интерфейс и попросите всех разработчиков следовать этому, все остальные биты будут абстрагированы. Конечный пользователь плагина не должен знать, что используется в качестве реализации. Погода его NLog или Log4Net.
Мы реализовали нечто очень похожее на это. Кроме того, у нас также есть целевая переменная, которая указывает на базу данных, файл и / или электронную почту для критических.