/// <summary> /// 根据提供的配置创建 <see cref="ILogger"/> 对象。 /// </summary> /// <param name="setting"></param> /// <returns></returns> private static ILogger CreateBySetting(LoggingConfigurationSetting setting) { var caching = setting.LogType.New <ILogger>(); if (caching == null) { return(null); } caching.As <IConfigurationSettingHostService>(s => ConfigurationUnity.AttachSetting(s, setting)); return(caching); }
/// <summary> /// Initializes target loggers in mode determined by configuration /// </summary> internal void Initialize() { logItemsQueue = new ConcurrentQueue <ApplicationLogs>(); targetLoggers = new Dictionary <int, ILogger>(); // LogController Level settings LoggingConfigurationSetting loggingSetting = CurrentLoggingConfiguration.LoggingConfigurationSetting; if (loggingSetting != null) { this.LoggingMode = loggingSetting.Mode; this.SleepInterval = loggingSetting.SleepInterval; this.MaxQueueSize = loggingSetting.MaxQueueSize; } // Logger Level settings LoggerSettings = CurrentLoggersConfiguration.LoggerConfigurationSettings.Cast <LoggerConfigurationSetting>().ToList(); try { // Setup Target loggers from configuration ordered by PriorityOrder foreach (LoggerConfigurationSetting configuredLogger in LoggerSettings.OrderBy(o => Convert.ToInt32(o.PriorityOrder))) { loggerSequence++; //loggerInstance = dependencyManager.Resolve<ILogger>(configuredLogger.TypeName); loggerInstance.LoggerParameters = configuredLogger.Parameters; loggerInstance.LoggerPriority = Convert.ToInt32(configuredLogger.PriorityOrder); targetLoggers.Add(loggerSequence, loggerInstance); } } catch (Exception) { // Do Nothing if logger setup fails } // If using Asynchronous processing, use another thread for Async Queue processing if (LoggingMode.Trim().ToUpperInvariant() == LogMode.Asynchronous.ToString().Trim().ToUpperInvariant()) { processQueueTask = Task.Factory.StartNew(() => { while (true) { ProcessFromQueue(); Thread.Sleep(SleepInterval); } }, new CancellationToken(), TaskCreationOptions.LongRunning, TaskScheduler.Default); } isInitialized = true; }
/// <summary> /// 根据应用程序配置,创建日志管理器。 /// </summary> /// <param name="configName">应用程序配置项的名称。</param> /// <returns><paramref name="configName"/>缺省时,如果应用程序未配置,则为 <see cref="DefaultLogger"/>,否则为配置项对应的 <see cref="ILogger"/> 实例。</returns> public static ILogger CreateLogger(string configName = null) { ILogger logger; LoggingConfigurationSetting setting = null; var section = ConfigurationUnity.GetSection <LoggingConfigurationSection>(); if (section != null && section.Factory != null) { logger = section.Factory.CreateInstance(configName) as ILogger; if (logger != null) { return(logger); } } if (string.IsNullOrEmpty(configName)) { if (section == null || section.Default == null) { return(DefaultLogger.Instance); } else { setting = section.Default; } } else if (section != null) { setting = section.Settings[configName]; } if (setting == null || setting.LogType == null) { return(null); } return(CreateBySetting(setting)); }