Пример #1
0
        public void Configure(IConfigSection section, ILogAppender[] appenders)
        {
            var level = section.Get("level", false);

            if (level != null)
            {
                LogLevel = (LogLevel)Enum.Parse(typeof(LogLevel), level, true);
            }

            var appenderConf = section.GetSections("appender");

            if (appenderConf.Length != 0)
            {
                List <ILogAppender> used = new List <ILogAppender>();
                foreach (var appender in section.GetSections("appender"))
                {
                    string refName = appender.Get("@ref");
                    var    app     = appenders.FirstOrDefault(m => m.Name == refName);

                    if (app != null)
                    {
                        used.Add(app);
                    }
                }
                Appenders = used.ToArray();
            }
        }
Пример #2
0
        private IConfigSection GetLoggerConfig(Logger logger)
        {
            IConfigSection loggerSection = null;

            if (_config != null)
            {
                var loggerSections = _config.GetSections("loggers/logger")
                                     .Select(m => new { Section = m, Name = m.Get("@name") })
                                     .ToArray();

                loggerSection = loggerSections
                                .Where(m => Wildcard.Match(m.Name, logger.Name, ignoreCase: true))
                                .Select(m => m.Section).FirstOrDefault();
            }
            return(loggerSection);
        }
Пример #3
0
        private ILogAppender[] ConfigureAppenders(IConfigSection section)
        {
            var appenderTypes = GetType().Assembly.GetTypes()
                                .Where(m => m.GetInterfaces().Any(m1 => m1 == typeof(ILogAppender)))
                                .ToArray();

            List <ILogAppender> appenders = new List <ILogAppender>();

            try
            {
                foreach (var conf in section.GetSections("appenders/appender"))
                {
                    var typeName = conf.Get("@type");
                    var type     = appenderTypes.FirstOrDefault(m => m.FullName.Equals(typeName, StringComparison.InvariantCultureIgnoreCase));
                    type = type ?? appenderTypes.FirstOrDefault(m => m.Name.Equals(typeName, StringComparison.InvariantCultureIgnoreCase));
                    type = type ?? appenderTypes.FirstOrDefault(m => m.Name.Equals($"{typeName}Appender", StringComparison.InvariantCultureIgnoreCase));

                    if (type == null)
                    {
                        throw new LogConfigurationException($"Unsupported appender type: {typeName}");
                    }

                    var appender = (ILogAppender)Activator.CreateInstance(type);
                    appender.Configure(conf);
                    appenders.Add(appender);
                }
            }
            catch
            {
                foreach (var appender in appenders)
                {
                    (appender as IDisposable)?.Dispose();
                }

                throw;
            }
            return(appenders.ToArray());
        }