Недавно я работал над проектом, в котором, помимо прочего, мы хотим предоставить централизованную систему конфигурации. Мы используем WCF, Silverlight, C # и т. Д. Для создания распределенной системы сервисов и клиентов. Одна из вещей, которые мы хотим настроить, это регистрация. Очевидно, что мы можем настроить log4net или NLog через app.config или через отдельный файл конфигурации регистрации. Мы также можем настроить с помощью кода. Я хотел посмотреть, возможно ли настроить через XML из кода. Другими словами, представьте, что у вас в памяти (может быть, прочитано из базы данных?) Весь XML, необходимый для настройки любой среды ведения журналов. Это можно сделать? Можно ли настроить log4net и / или NLog через строку, содержащую правильно сформированную (в контексте конкретной структуры ведения журнала), а не чтение из файла или через «обычную» конфигурацию API?
Я выяснил, как это сделать для каждой из этих структур журналирования. Я не уверен, что мы на самом деле будем его использовать, но я подумал, что поделюсь этим здесь на SO, на тот случай, если кто-то еще может найти это полезным. Кроме того, не стесняйтесь комментировать целесообразность (или нет) настройки каркасов ведения журнала таким образом.
Две очевидные потенциальные проблемы, о которых я могу подумать:
Может быть трудно создать действительный XML (или ввести его в базу данных). Мое первое предположение состоит в том, что можно определить XML так же, как сегодня. Поместите его в файл app.config (или внешний конфигурационный файл), а затем запустите тестовую программу, чтобы убедиться, что XML дает ожидаемые результаты.
Насколько легко или сложно (или невозможно) обновить XML в базе данных, а затем заставить программу / службу / что-либо еще реагировать на изменение (например, с помощью опции ConfigureAndWatch в log4net)? Меня не интересует, как программа или служба узнают, что XML был обновлен. Давайте просто предположим, что программа будет периодически проверять базу данных. Учитывая новую строку XML, достаточно легко перенастроить каркасы ведения журналов.
Я опубликую свою технику в качестве ответа на этот вопрос.