Търся съвети за най-добрия начин за динамично преконфигуриране на нивото на регистриране на Log4Net в моите ASP.NET приложения. Обикновено използвам проста конфигурация, при която root регистраторът дефинира нивото на регистриране по подразбиране, напр.
<log4net>
<root>
<level value="INFO" />
<appender-ref ref="..." />
<appender-ref ref="..." />
... etc ...
</root>
... etc
и може да има няколко добавки, всяка с филтри за определяне на нивата на регистриране, които използват.
Първото нещо, което бих искал да мога да направя, е да позволя на администраторите да се свържат с администраторска страница, която им позволява да (a) преглеждат текущото ниво за root регистратора и (b) динамично да го променят. Не искам да използвам "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 е ефективното ниво - същото като Level, ако последното не е null, в противен случай се наследява от родителя.
Поне един от върнатите по-горе регистратори ще има основния регистратор като родител, което ми позволява да получа препратка към основния регистратор.
С горното трябва да е възможно да се реконструира йерархията на регистратора.
Актуализация 2
Благодаря отново. Внедрих сървърна контрола на ASP.NET, която показва йерархията на регистратора в TreeView с квадратчета за отметка и позволява на потребителя динамично да променя нивото на регистриране във всеки възел в йерархията. Работи страхотно и ще го поставя на страницата за администриране във всички мои приложения за ASP.NET Web и Web Service!