Я ищу советы по наилучшему способу реконфигурировать уровень ведения журнала Log4Net динамически в моих приложениях ASP.NET. Обычно я использую простую конфигурацию, в которой корневой регистратор определяет уровень ведения журнала по умолчанию, например.
<log4net>
<root>
<level value="INFO" />
<appender-ref ref="..." />
<appender-ref ref="..." />
... etc ...
</root>
... etc
и может быть несколько приложений, каждый из которых имеет фильтры для определения уровней ведения журнала, которые они используют.
-
Первое, что я хотел бы сделать, это разрешить администраторам подключаться к странице администратора, которая позволяет им (a) просматривать текущий уровень для корневого регистратора и (b) динамически изменять Это. Я не хочу использовать "ConfigureAndWatch" и записывать в файл конфигурации на диске, потому что я не хочу, чтобы эти изменения сохранялись при повторном использовании приложения.
-
Далее я хотел бы перейти дальше, и на странице администратора можно отобразить TreeView со всеми текущими Loggers, которые существуют в приложении, и их текущий уровень ведения журнала. И позвольте администратору иметь возможность изменять уровень ведения журнала выборочно на любом уровне иерархии.
Идея состоит в том, чтобы создать общую страницу администратора, которую я могу разместить во всех моих приложениях, что позволяет администраторам выборочно включать протоколы уровня DEBUG динамически для устранения неполадок.
Я нахожу API Log4Net несколько запутанным, может ли кто-нибудь указать на образцы или показать лучший способ достичь этого.
Update:
Оба ответа одинаково хороши, поэтому я принял первое - спасибо. Чтобы повторить, я могу получить все текущие регистраторы следующим образом:
foreach (log4net.ILog log in log4net.LogManager.GetCurrentLoggers())
{
log4net.Repository.Hierarchy.Logger logger =
(log4net.Repository.Hierarchy.Logger)log.Logger;
Debug.WriteLine(
String.Format("{0} Parent {1} Level {2} EffectiveLevel {3}<br>",
logger.Name,
logger.Parent.Name,
logger.Level == null ? "<null>" : logger.Level.Name,
logger.EffectiveLevel
)
);
}
-
Эффективный уровень - это эффективный уровень - тот же, что и Level, если последний не является нулевым, иначе унаследован от родителя.
-
Как минимум один из вышеперечисленных регистраторов будет иметь корневой регистратор как родительский, что позволит мне получить ссылку на корневой журнал.
С вышесказанным следует восстановить иерархию регистратора.
Обновление 2
Еще раз спасибо. Я реализовал серверный элемент управления ASP.NET, который отображает иерархию регистратора в TreeView с флажками и позволяет пользователю динамически изменять уровень ведения журнала на любом node в иерархии. Отлично работает, и я буду размещать его на странице администратора во всех приложениях ASP.NET для веб-и веб-сервисов!