Libraries/src/Amazon.Lambda.Logging.AspNetCore/LambdaILoggerProvider.cs (42 lines of code) (raw):

using Amazon.Lambda.Logging.AspNetCore; using System; using System.Collections.Concurrent; namespace Microsoft.Extensions.Logging { /// <summary> /// The ILoggerProvider implementation that is added to the ASP.NET Core logging system to create loggers /// that will send the messages to the CloudWatch LogGroup associated with this Lambda function. /// </summary> internal class LambdaILoggerProvider : ILoggerProvider, ISupportExternalScope { // Private fields private readonly LambdaLoggerOptions _options; private IExternalScopeProvider _scopeProvider; private readonly ConcurrentDictionary<string, LambdaILogger> _loggers; // Constants private const string DEFAULT_CATEGORY_NAME = "Default"; /// <summary> /// Creates the provider /// </summary> /// <param name="options"></param> public LambdaILoggerProvider(LambdaLoggerOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } _options = options; _loggers = new ConcurrentDictionary<string, LambdaILogger>(); _scopeProvider = options.IncludeScopes ? new LoggerExternalScopeProvider() : NullExternalScopeProvider.Instance; } /// <summary> /// Creates the logger with the specified category. /// </summary> /// <param name="categoryName"></param> /// <returns></returns> public ILogger CreateLogger(string categoryName) { var name = string.IsNullOrEmpty(categoryName) ? DEFAULT_CATEGORY_NAME : categoryName; return _loggers.GetOrAdd(name, loggerName => new LambdaILogger(name, _options) { ScopeProvider = _scopeProvider }); } /// <inheritdoc /> public void SetScopeProvider(IExternalScopeProvider scopeProvider) { _scopeProvider = scopeProvider; foreach (var logger in _loggers) { logger.Value.ScopeProvider = _scopeProvider; } } /// <summary> /// /// </summary> public void Dispose() { } } }