Я ищу советы о том, как наилучшим образом перенастроить уровень ведения журнала Log4Net динамически в моих приложениях ASP.NET. Я обычно использую простую конфигурацию, где корневой регистратор определяет уровень ведения журнала по умолчанию, например,
<log4net>
<root>
<level value="INFO" />
<appender-ref ref="..." />
<appender-ref ref="..." />
... etc ...
</root>
... etc
и может быть несколько приложений, каждый с фильтрами для определения используемых уровней ведения журнала.
Первое, что я хотел бы сделать, это разрешить администраторам подключаться к странице администратора, которая позволяет им (а) просматривать текущий уровень для корневого регистратора и (б) динамически изменять Это. Я не хочу использовать «ConfigureAndWatch» и записывать в файл конфигурации на диске, потому что я не хочу, чтобы эти изменения сохранялись при перезапуске приложения.
Далее я хотел бы пойти дальше, и на странице администратора можно отобразить TreeView со всеми текущими регистраторами, которые существуют в приложении, и их текущий уровень ведения журнала. И разрешить администратору выборочно изменять уровень ведения журнала на любом уровне иерархии.
Идея состоит в том, чтобы создать общую страницу администратора, которую я могу разместить во всех своих приложениях, что позволит администраторам выборочно включать журналирование на уровне DEBUG динамически в целях устранения неполадок.
Я нахожу API Log4Net немного запутанным, может кто-нибудь указать на образцы или показать лучший способ для достижения этой цели.
Обновление:
Оба ответа одинаково хороши, поэтому я принял первый - спасибо. Чтобы повторить, я могу получить все текущие регистраторы следующим образом:
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
)
);
}
EffectiveLevel - это эффективный уровень, аналогичный уровню, если последний не равен нулю, в противном случае наследуется от родителя.
По крайней мере один из регистраторов, возвращенных выше, будет иметь корневой регистратор в качестве родительского, что позволяет мне получить ссылку на корневой регистратор.
С учетом вышесказанного можно восстановить иерархию регистратора.
Обновление 2
Еще раз спасибо. Я реализовал серверный элемент управления ASP.NET, который отображает иерархию средства ведения журнала в TreeView с флажками и позволяет пользователю динамически изменять уровень ведения журнала на любом узле в иерархии. Прекрасно работает, и я буду размещать его на странице администратора во всех моих приложениях ASP.NET Web и Web Service!