Dave, 

> Is there a method that allows me to set a logger level 
> without going through the repository?

You can set the Level property on the
log4net.Repository.Hierarchy.Logger object. You can do this in a number
of ways but the simplest is:

log4net.Repository.Hierarchy.Logger logger =
((log4net.Repository.Hierarchy.Logger)log4net.LogManager.GetLogger("foo"
).Logger);
logger.Level = logger.Repository.LevelMap["DEBUG"];


This lets you set the level for an individual logger.


> 
> 2) Is there a way to enable/disable appenders programmatically?

Appenders have a Threshold level (or at least the AppenderSkeleton does
and appenders should be derived from that) that you can set to Level.Off
which will prevent any logging from occurring through that appender. 

log4net.Repository.Hierarchy.Logger logger =
((log4net.Repository.Hierarchy.Logger)log4net.LogManager.GetLogger("foo"
).Logger);
log4net.Appender.AppenderSkeleton appender =
(log4net.Appender.AppenderSkeleton)logger.GetAppender("myAppender");
appender.Threshold = Level.Off.


This will not shutdown the appender, e.g. the FileAppender will still
hold a write lock on the output file. You may want instead to remove the
appender from the Logger and close it.


log4net.Repository.Hierarchy.Logger logger =
((log4net.Repository.Hierarchy.Logger)log4net.LogManager.GetLogger("foo"
).Logger);
log4net.Appender.IAppender appender = logger.GetAppender("myAppender");
logger.RemoveAppender(appender);
appender.Close();

An appender cannot be revived after it has been closed.


Cheers,
Nicko

Reply via email to