> Is it possible to get a list of appenders (independent of 
> loggers) and control their output (level = off...level = ???) 
> so as to be able to control them globally (for all loggers to 
> use), or do I have to do each appender for each logger in a 
> series of foreach loops?

Appenders are only available through their logger.

foreach(log4net.ILog log in log4net.LogManager.GetCurrentLoggers())
{
  foreach(log4net.Appender.IAppender appender in
((log4net.Repository.Hierarchy.Logger)log.Logger).Appenders)
  {
    do something with the appender...
  }
}

It is possible to attach the same appender instance to more than one
logger, therefore you may want to add all the appenders to a collection
and unique them. Appender Names are not currently guaranteed to be
unique.


Nicko


> 
> Thanks,
> 
> Dave Witt
> 
> ps.  If you haven't figured it out yet, I am trying to build 
> a simple utility to manage the operation of loggers (levels) 
> and appenders (on/off) to help our support folks manage 
> log4net at a higher level than us as developers do :-)
> 
> 
> 
> At 07:29 PM 9/26/2004, you wrote:
> >
> > > Thanks for the quick reply!!!!!!  How about 2 more questions...?
> > >
> > > 1) I am using loglevel = log.Logger.Repository.Threshold.Name
> > > as the mechanism to get a logger's level.  Is that the 
> best way to 
> > > get the level for a given logger?
> >
> >That will give you the level for the whole repository not for the 
> >logger.
> >
> >You need to do:
> >
> >((log4net.Repository.Hierarchy.Logger)log.Logger).Level.Name
> >
> >The log4net API is optimised for the configurator rather than 
> >programmatic configuration, this does mean that there is 
> rather a lot 
> >of casting required to do it programmatically.
> >
> >
> > > 2) Does it hurt (do bad things) to call the DOMConfigurator more 
> > > than once?  I have been whenever I started a logger 
> (didn't mean to) 
> > > but everything seems to be working.
> >
> >Well it will hurt performance, but it is safe to reload the 
> >configuration. You can even ask the DOMConfigurator to watch 
> a file for 
> >changes and reload the configuration automatically.
> >
> >Cheers,
> >Nicko
> >
> >
> > >
> > > Once again, THANKS FOR THE QUICK REPLY!!!!!!
> > >
> > > Dave Witt
> > >
> > > ps.  You and your group have done a wonderful job on this!!!!!!!!
> > >
> > >
> > >
> > >
> > > At 06:29 PM 9/26/2004, you wrote:
> > > >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.GetL
> >ogger("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.GetL
> >ogger("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.GetL
> >ogger("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