Recently I had the need to change the logging level for all loggers due to the need to hit the logging statements for NCover. This was harder than it appeared, and I couldn't really find anything out there that really documented the code you needed, so here's the code:
private void TurnOnLogging()
{
log4net.Repository.ILoggerRepository[] repositories= log4net.LogManager.GetAllRepositories();
//Configure all loggers to be at the debug level.
foreach (log4net.Repository.ILoggerRepository repository in repositories)
{
repository.Threshold = repository.LevelMap["DEBUG"];
log4net.Repository.Hierarchy.Hierarchy hier = (log4net.Repository.Hierarchy.Hierarchy)repository;
log4net.Core.ILogger[] loggers=hier.GetCurrentLoggers();
foreach (log4net.Core.ILogger logger in loggers)
{
((log4net.Repository.Hierarchy.Logger) logger).Level = hier.LevelMap["DEBUG"];
}
}
//Configure the root logger.
log4net.Repository.Hierarchy.Hierarchy h = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository();
log4net.Repository.Hierarchy.Logger rootLogger = h.Root;
rootLogger.Level = h.LevelMap["DEBUG"];
}
Some caveat's with this:
1. It'll only work after you've already done something to cause the logging system to initialize.
2. I'll only see loggers that have been created.
Hopefully this is helpful to someone else!