logging-log4net-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nicko Cadell" <ni...@neoworks.com>
Subject RE: Programatically changing the logger for NHibernate
Date Tue, 13 Dec 2005 14:11:54 GMT
Philip,

Rather than use a Filter, there is a more performant option, which is to
set the level on the NHibernate logger. By default this will be
inherited by the child loggers, i.e. all of the NHibernate loggers. To
do this in code you can do:

((log4net.Repository.Hierarchy.Logger)LogManager.GetLogger("NHibernate")
.Logger).Level = Level.Off;

While there are advantages to configuring log4net programmatically this
sort of logger hierarchy is much easier to see in the XML config file.

Cheers,
Nicko

> -----Original Message-----
> From: Philip Nelson [mailto:panmanphil@yahoo.com] 
> Sent: 28 November 2005 16:57
> To: Log4NET User
> Subject: Re: Programatically changing the logger for NHibernate
> 
> And this did the trick. I tried to use the PropertyFilter 
> directly, but I couldn't come up with the property key that 
> represented LoggerName. I tried loggername, LoggerName, 
> logger, Logger, log4net:logger and log4net:loggername
> 
> class NHibernateFilter : StringMatchFilter {
>     public override FilterDecision Decide(LoggingEvent loggingEvent)
>     {
>         FilterDecision decision = FilterDecision.Accept;
>         if (loggingEvent.LoggerName.StartsWith("NHibernate"))
>             decision = FilterDecision.Deny;
> 	
>         return decision;
>     }
> 
> }
> 
> Thanks for your help!
> 
> --- Philip Nelson <panmanphil@yahoo.com> wrote:
> 
> > I'll look into it, thanks.
> > 
> > --- DWilliams@strohlsystems.com wrote:
> > 
> > > I would think that you could set up a filter to exclude the 
> > > NHibernate logs.  Looking at the code however implies 
> that you might 
> > > have to write a not assembly filter.
> > > 
> > > 
> > > 
> > > 
> > >                                                           
>                  
> > >              Philip Nelson                                
>                  
> > >              <panmanphil@yahoo                            
>                  
> > >              .com>                                        
>               To 
> > >                                        Log4NET User       
>                  
> > >              11/28/2005 08:40          
> <log4net-user@logging.apache.org>   
> > >              AM                                           
>               cc 
> > >                                                           
>                  
> > >                                                           
>          Subject 
> > >              Please respond to         Re: 
> Programatically changing the    
> > >               "Log4NET User"           logger for 
> NHibernate               
> > >              <log4net-user@log                            
>                  
> > >              ging.apache.org>                             
>                  
> > >                                                           
>                  
> > >                                                           
>                  
> > >                                                           
>                  
> > >                                                           
>                  
> > > 
> > > 
> > > 
> > > 
> > > Since replies have been light, and my reply to "why not use xml 
> > > configuration"
> > > might have been a little abrupt, let me elaborate.
> > > 
> > > I have been a log4net user almost since the first release. I have 
> > > evangelized using it for the whole time, just like I evangelized 
> > > log4j to my java clients before that. The tool is just 
> what I want 
> > > and has been really useful to me.
> > > I
> > > hope my last post didn't lead you to think I'm anti xml or 
> > > something. I think I'm still listed on the JDOM JSR expert group, 
> > > and have accepted patches in both the crimson and xerces parsers.
> > > 
> > > My original reason for trying this was because I was 
> working on some 
> > > code to invoke HttpRuntime outside of IIS, and the HttpRuntime 
> > > configuration system insists on being the first caller of 
> > > System.Configuration. At the time, I understood the 
> log4net assembly 
> > > attribute as responsible for loading the configuration 
> system, and 
> > > thought, how hard could this be to do in code.
> > > The
> > > answer was not hard, and I got the side benefits of not having to 
> > > maintain dozens of log4net config files scattered in the 
> flotsam and 
> > > jetsam of 4 years of development. And, it would not 
> require any fuss 
> > > when versions change, unlike the publicpolicytoken 
> attribute of the 
> > > xml configuration file. And, I can use injection 
> techniques to add 
> > > logging setup to my apps with minmal coding.
> > > Dang!
> > > 
> > > Then nhibernate entered the picture and decided to log on 
> it's own, 
> > > bad behavior for a library except for debug logging IMHO.
> > > 
> > > --- Philip Nelson <panmanphil@yahoo.com> wrote:
> > > 
> > > > I had added a configuration that built my loggers in 
> code only and 
> > > > all
> > > was
> > > > well
> > > > (no xml!). Later though, I found out that NHibernate is doing 
> > > > something
> > > bad,
> > > > logging exceptions with log.Error. These exceptions are 
> handled by 
> > > > the caller, so I really don't want those log calls made 
> at all. No 
> > > > problem, I thought
> > > I'd
> > > > create a repository for the NHibernate assembly, setup the 
> > > > appender I
> > > want,
> > > > and
> > > > this would get used instead of my default logger that 
> sends emails 
> > > > on
> > > error.
> > > >
> > > > ILoggerRepository logger = Reset(); //the normal logger
> > > >
> > > > string pattern = "%d %-5p %c %x - %m%n"; string filename = 
> > > > Path.Combine(_logPath, LogFileName); string debugFilename = 
> > > > Path.Combine(_logPath + "debug/", LogFileName);
> > > >
> > > > //setup nhibernate logger separately so it will not 
> email errors 
> > > > Type nType = AppContext.ActiveSession.GetType(); //gets the 
> > > > NHibernate ISession Assembly nhib = nType.Assembly; 
> > > > ILoggerRepository nrep = null; ILogger l = 
> > > > LoggerManager.GetLogger(nhib, nType); nrep = l.Repository; 
> > > > nrep.ResetConfiguration(); ForwardingAppender dbgAppender = new 
> > > > ForwardingAppender(); 
> > > > dbgAppender.AddAppender(setupDebugAppender(pattern, 
> > > > Path.Combine(_logPath
> > > +
> > > > "debug/NHib", LogFileName)));
> > > > log4net.Config.BasicConfigurator.Configure(nrep, dbgAppender);
> > > >
> > > > My assumption was that the normal logger repository, "logger" 
> > > > would now
> > > not
> > > > be
> > > > used because NHibernate gets its logger with 
> > > > LogManager.GetLogger(typeof(this)).
> > > >
> > > > The new logger logs correctly, but the original logger 
> also logs, 
> > > > so my
> > > goal
> > > > of
> > > > getting rid of the emails wasn't met.
> > > >
> > > > Any ideas about how to cheat NHibernate of it's logging?
> > > >
> > > > Philip - 
> > > > http://www.xcskiwinn.org/community/blogs/panmanphil/default.aspx
> > > > "Now that was a bad vowel movement" - Barbara
> > > >
> > > 
> > > 
> > > Philip - 
> > > http://www.xcskiwinn.org/community/blogs/panmanphil/default.aspx
> > > "Now that was a bad vowel movement" - Barbara
> > > 
> > > 
> > > 
> > 
> > 
> > Philip - 
> > http://www.xcskiwinn.org/community/blogs/panmanphil/default.aspx
> > "Now that was a bad vowel movement" - Barbara
> > 
> 
> 
> Philip - 
> http://www.xcskiwinn.org/community/blogs/panmanphil/default.aspx
> "Now that was a bad vowel movement" - Barbara
> 

Mime
View raw message