/// <summary> /// Adds the given provider to those used in creating <see cref="ILogger"/> instances. /// </summary> /// <param name="provider">The <see cref="ILoggerProvider"/> to add.</param> public void AddProvider(ILoggerProvider provider) { if (CheckDisposed()) { throw new ObjectDisposedException(nameof(LoggerFactory)); } lock (_sync) { AddProviderRegistration(provider, dispose: true); foreach (var existingLogger in _loggers) { var logger = existingLogger.Value; var loggerInformation = logger.Loggers; var newLoggerIndex = loggerInformation.Length; Array.Resize(ref loggerInformation, loggerInformation.Length + 1); loggerInformation[newLoggerIndex] = new LoggerInformation(provider, existingLogger.Key); logger.Loggers = loggerInformation; (logger.MessageLoggers, logger.ScopeLoggers) = ApplyFilters(logger.Loggers); } } }
/// 根据注册的ILoggerProvider,创建Logger需要的 LoggerInformation[] private LoggerInformation[] CreateLoggers(string categoryName) { var loggers = new LoggerInformation[_providerRegistrations.Count]; for (var i = 0; i < _providerRegistrations.Count; i++) { loggers[i] = new LoggerInformation(_providerRegistrations[i].Provider, categoryName); } return(loggers); }