Exemple #1
0
        /// <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);
        }