我最近將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)
任何提示的歡迎。
請注意,設置可加性似乎已停止重複我自己的代碼,但不是nhibernate的東西。 – TedTrippin 2010-05-06 17:35:14