using System.Collections.Concurrent; using GFramework.Core.Abstractions.logging; namespace GFramework.Core.logging; /// /// 带缓存的日志工厂包装器,避免重复创建相同名称的日志记录器实例 /// public sealed class CachedLoggerFactory : ILoggerFactory { private readonly ConcurrentDictionary _cache = new(); private readonly ILoggerFactory _innerFactory; /// /// 创建缓存日志工厂实例 /// /// 内部日志工厂 public CachedLoggerFactory(ILoggerFactory innerFactory) { _innerFactory = innerFactory ?? throw new ArgumentNullException(nameof(innerFactory)); } /// /// 获取或创建指定名称的日志记录器(带缓存) /// /// 日志记录器名称 /// 最小日志级别 /// 日志记录器实例 public ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info) { var cacheKey = $"{name}:{minLevel}"; return _cache.GetOrAdd(cacheKey, _ => _innerFactory.GetLogger(name, minLevel)); } }