2010-05-06 126 views
1

我最近將log4net日誌從使用配置文件切換到以編程方式進行設置。這導致了nhiberate條目重複2或有時3次。這是代碼。它使用一個字符串,它看起來像這樣「logger1 |調試,logger2 |資訊」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 2010-05-06 17:35:14

回答

0

我認爲答案是 - 其實不寫實際的重複。如果沒有調試NHibernate代碼,我不能確定,但​​我猜它可能只是寫出來或重複做同樣的事情

我們將回到使用配置文件,所以將不得不看我是否仍然得到可能的重複。

0

我真的不知道發生了什麼,但我會嘗試刪除下面幾行:

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

記錄儀應該從根的appender反正繼承附加目的地。也許log4net混合了一些東西,當你以這種方式添加appender,雖然不應該是這樣的...