Как получить все регистраторы log4net, работающие в данный момент во всех процессах

Каждый процесс в нашей системе использует log4net. Многие из этих процессов запущены как сервисы. Некоторые из этих запущенных приложений содержат многословные отладочные записи, и нам бы хотелось иметь возможность ограничить их вывод. Все регистраторы используют один и тот же файл .config для установки текущего уровня ведения журнала. Я работаю над приложением, которое получит доступ ко всем регистраторам, которые устанавливают источник, используя

log4net.GlobalContext.Properties["source"] = source;

Что я хотел бы сделать, так это получить список всех регистраторов, зарегистрированных в настоящее время, получить имя их источника, а затем изменить файл .config для каждого из этих источников, чтобы индивидуально настроить уровень вывода для каждого из них.

Проблема, с которой я сталкиваюсь, заключается в том, чтобы найти список всех этих регистраторов, поэтому я могу добавить запись в файл .config. Есть ли способ получить этот список регистраторов для всех процессов из одного приложения?

Я пытался использовать GetRepository().GetCurrentLoggers(), но это возвращает регистратор только для текущего вызывающего приложения.


person Paul    schedule 01.03.2017    source источник


Ответы (2)


Не существует стандартного способа получения регистраторов, находящихся в другом процессе. Вы должны сделать что-то самостоятельно.

person Peter    schedule 02.03.2017

Попробуй это

using log4net.Repository.Hierarchy;
var appenders = ((Hierarchy)LogManager.GetRepository())
                                     .Root.Appenders;
person Sameh    schedule 02.12.2019