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(); } }
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); }
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()); }