log4net - настройте использование нескольких конфигурационных файлов

Чтобы развернуть ответ runeh:

>>> def foo(a):
...    x = 2
...    return x + a

>>> import inspect

>>> inspect.getsource(foo)
u'def foo(a):\n    x = 2\n    return x + a\n'

print inspect.getsource(foo)
def foo(a):
   x = 2
   return x + a

EDIT: Как указано в @ 0sh, этот пример работает с использованием ipython, но не является простым python. В обоих случаях должно быть хорошо, при импорте кода из исходных файлов.

26
задан Stuart Childs 6 May 2010 в 18:19
поделиться

3 ответа

Я просто сам столкнулся с этой проблемой. Хотя это не совсем то, что я бы назвал «идеальным», я думаю, что лучшим решением в настоящее время является использование метода ConfigureAndWatch класса XmlConfigurator. По сути, сборка узла настраивает конфигурацию log4net с помощью определенного файла конфигурации. Когда ваши плагины загружаются, заставьте их записать свои конфигурационные элементы в раздел конфигурации log4net в том же файле конфигурации. Поскольку log4net было сказано следить за изменениями в этом файле с помощью ConfigureAndWatch, когда в файл добавлены эти новые данные, log4net перезагрузит конфигурацию, которая теперь будет включать элементы конфигурации из плагинов.

Это немного странно, но, похоже, это работает. Следующим шагом, конечно, будет перемещение этого в мою платформу ведения журналов, чтобы доступ к файлу конфигурации был федеративным.

Обратите внимание, что существует небольшая задержка между записью / сохранением конфигурации плагина и перезагрузкой обновленной конфигурации и применением к репозиторию регистратора.

2
ответ дан 28 November 2019 в 17:19
поделиться

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

У log4net есть концепция, называемая репозиториями, которую можно настраивать отдельно. Он не очень популярен и не очень хорошо документирован, но вот некоторую документацию, которую я нашел:

http://logging.apache.org/log4net/release/manual/repositories.html

В любом случае, все, что вам нужно сделать, это добавить RepositoryAttribute в сборку вашего плагина или сборки с именем репозитория, уникальным для этого плагина, и log4net будет отделять его от всего остального.

16
ответ дан Tinister 28 November 2019 в 17:19
поделиться

Еще один способ - иметь несколько файлов конфигурации log4net в нескольких местах, загрузить их все в XDocument , чтобы эффективно составить один, а затем вызвать XmlConfigurator.Configure () . Я сделал это таким образом, чтобы создать каждый файл, следуя XSD для конфигурации, загрузить все дочерние элементы корневого узла каждого файла log4net в отдельные экземпляры XElement и объединить их в новый XDocument с корневым узлом log4net . Я дополню этот ответ кодом (его сейчас нет передо мной), если кому-то будет интересно.

Найти файлы - это другое дело: используйте какое-то соглашение для сканирования файлов (например, *. Dll.log4net.config ), вставьте их в сборки или что-то в этом роде.

Реализацию такого кода можно найти на:

www.kopf.com.br/kaplof/using-multiple-configuration-files-with-log4net

4
ответ дан 28 November 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: