2010-05-06 6 views
1

최근 log4net 로깅을 설정 파일을 사용하여 프로그래밍 방식으로 설정하지 않았습니다. 이것은 nhiberate 항목이 2 번 또는 3 번 반복되는 결과를 가져 왔습니다. 여기에 코드가 있습니다. 어떤 힌트 환영 "정보 | | 디버그, logger2 logger1"Log4net 중복 로깅 엔트리

private void SetupLog4netLoggers() 
    { 
     IAppender appender = GetAppender(); 

     SetupRootLogger(appender); 

     foreach (string logger in Loggers) 
     { 
      CommaStringList parts = new CommaStringList(logger, '|'); 
      if (parts.Count != 2) 
       continue; 

      AddLogger(parts[0], parts[1], appender); 
     } 

     log.Debug("Log4net has been setup"); 
    } 

    private IAppender GetAppender() 
    { 
     RollingFileAppender appender = new RollingFileAppender(); 
     appender.File = LogFile; 
     appender.AppendToFile = true; 
     appender.MaximumFileSize = MaximumFileSize; 
     appender.MaxSizeRollBackups = MaximumBackups; 

     PatternLayout layout = new PatternLayout(PATTERN); 
     layout.ActivateOptions(); 

     appender.Layout = layout; 
     appender.ActivateOptions(); 

     return appender; 
    } 

    private void SetupRootLogger(IAppender appender) 
    { 
     Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); 

     hierarchy.Root.RemoveAllAppenders(); 
     hierarchy.Root.AddAppender(appender); 
     hierarchy.Root.Level = GetLevel(RootLevel); 

     hierarchy.Configured = true; 

     log.Debug("Root logger setup, level[" + RootLevel + "]"); 
    } 

    private void AddLogger(string name, string level, IAppender appender) 
    { 
     Logger logger = LogManager.GetRepository().GetLogger(name)as Logger; 
     if (logger == null) 
      return; 

     logger.Level = GetLevel(level); 
     logger.Additivity = false; 
     logger.RemoveAllAppenders(); 
     logger.AddAppender(appender); 

     log.Debug("logger[" + name + "] added, level[" + level + "]"); 
    } 

그리고 여기에 우리가 우리의 로그에 표시되는 내용의 예 ...

2010-05-06 15:50:39,781 [1] DEBUG NHibernate.Impl.SessionImpl - running ISession.Dispose() 
2010-05-06 15:50:39,781 [1] DEBUG NHibernate.Impl.SessionImpl - closing session 
2010-05-06 15:50:39,781 [1] DEBUG NHibernate.AdoNet.AbstractBatcher - running BatcherImpl.Dispose(true) 
2010-05-06 15:50:39,796 [1] DEBUG NHibernate.Impl.SessionImpl - running ISession.Dispose() 
2010-05-06 15:50:39,796 [1] DEBUG NHibernate.Impl.SessionImpl - closing session 
2010-05-06 15:50:39,796 [1] DEBUG NHibernate.AdoNet.AbstractBatcher - running BatcherImpl.Dispose(true) 
2010-05-06 15:50:39,796 [1] DEBUG NHibernate.Impl.SessionImpl - running ISession.Dispose() 
2010-05-06 15:50:39,796 [1] DEBUG NHibernate.Impl.SessionImpl - closing session 
2010-05-06 15:50:39,796 [1] DEBUG NHibernate.AdoNet.AbstractBatcher - running BatcherImpl.Dispose(true) 

그것은이 같은 형태의 문자열을 사용합니다.

+0

참고로 덧셈을 설정하면 내 코드는 반복하지만 nhibernate는 반복하지 않는 것으로 보입니다. – TedTrippin

답변

0

제 생각에 대답은 - 실제로는 중복을 쓰지 않습니다. Hibernate 코드를 디버깅하지 않고서는 확신 할 수 없지만, 아마 그냥 쓰거나 반복해서 똑같은 일을한다고 짐작할 수있다.

어쨌든 설정 파일을 사용하기 때문에 계속 알아봐야 할 것이다. 가능한 중복.

0

내가 무슨 일이 일어나고 있는지 정말 잘 모르겠지만, 내가 다음 줄을 제거하려고합니다 :

logger.Additivity = false; 
logger.RemoveAllAppenders(); 
logger.AddAppender(appender); 

로거는 루트 펜더에서 어쨌든 펜더을 상속합니다. 어쨌든 log4net은 이런 방식으로 appenders를 추가 할 때 무언가를 섞을 수도 있습니다 ...