Dave,

I forgot the most important logger; the Root of the hierarchy.

((log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetLoggerRep
ository()).Root.Appenders 

Nicko

> -----Original Message-----
> From: David B. Witt [mailto:[EMAIL PROTECTED] 
> Sent: 27 September 2004 15:43
> To: Log4NET User
> Subject: RE: log4net Questions
> 
> 
> Nicko,
> 
> I tried the code snipet you sent me (below) and it finds no 
> appenders for each logger.  Since the loggers are created 
> programmatically
> (...getlogger("name")) and are not included in the .config 
> file, is it possible that they don't have any appenders 
> "attached" to them, but instead make use of the appenders 
> through an "inheritance" path?  I ask that because the 
> appenders are working fine and the loggers are sending stuff 
> to them, it is just that I can't fine them using the code you sent me.
> 
> Any ideas????
> 
> Thanks,
> 
> Dave
> 
> 
> At 04:42 AM 9/27/2004, you wrote:
> >
> > > 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