/// <summary> /// Reads the <see cref="SlfConfigurationSection"/> and instantiates the ILoggerFactory defined in configuration. /// </summary> /// <param name="configSection"></param> protected virtual ILoggerFactory ReadConfiguration(SlfConfigurationSection configSection) { // Throw exception if section is not a SlfConfigurationSection if (configSection == null) { var msg = string.Format("Configuration section named {0} must be type {1}.", _sectionName, typeof(SlfConfigurationSection).FullName); throw new ConfigurationErrorsException(msg); } // Construct the factory return(CreateFactoryInstance(configSection.Factory)); }
/// <summary> /// Prepares the internal dictionaries and caches for factory /// requests, but without already creating the fatory instances. /// </summary> /// <param name="configuration">An SLF configuration section that /// provides configuration settings about factories and loggers.</param> protected void LoadConfiguration(SlfConfigurationSection configuration) { // construct the named factories. var factories = new Dictionary <string, ILoggerFactory>(); if (configuration != null && configuration.Factories != null) { foreach (FactoryConfigurationElement factoryConfiguration in configuration.Factories) { ILoggerFactory factory = CreateFactoryInstance(factoryConfiguration); if (factories.ContainsKey(factoryConfiguration.Name)) { DiagnosticLogger.Warn("There are duplicate factories with the name [{0}]", factoryConfiguration.Name); } else { factories.Add(factoryConfiguration.Name, factory); } } } //if there is no default factory, create an implicit entry that //resolves to a NullLoggerFactory if (!factories.ContainsKey(LoggerService.DefaultLoggerName)) { factories.Add(LoggerService.DefaultLoggerName, NullLoggerFactory.Instance); } //process logger configurations List <LoggerConfigurationElement> loggerConfigurationList = new List <LoggerConfigurationElement>(); if (configuration != null && configuration.Loggers != null) { foreach (LoggerConfigurationElement loggerConfiguration in configuration.Loggers) { loggerConfigurationList.Add(loggerConfiguration); //make sure a correct factory name is referenced string factoryName = loggerConfiguration.FactoryName; if (!factories.ContainsKey(factoryName)) { const string msg = "Declared logger configuration '{0}' refers to undeclared logger factory '{1}'"; DiagnosticLogger.Error(msg, loggerConfiguration.LoggerName, factoryName); // associate with a null logger factory base.RegisterFactory(loggerConfiguration.LoggerName, NullLoggerFactory.Instance); } else { ILoggerFactory factory = factories[factoryName]; base.RegisterFactory(loggerConfiguration.LoggerName, factory); } } } // if there is no default logger declaration, create one that links to the default factory if (loggerConfigurationList.Find(el => el.LoggerName == LoggerService.DefaultLoggerName) == null) { base.RegisterFactory(LoggerService.DefaultLoggerName, factories[LoggerService.DefaultLoggerName]); } }
/// <summary> /// Loads the resolver configuration from the applications App.config file. /// </summary> public virtual void Load() { SlfConfigurationSection config = ParseConfiguration(); LoadConfiguration(config); }