GFramework/GFramework.Core/Logging/CachedLoggerFactory.cs
GeWuYou 23489570bf fix(analyzers): 降低 Core、Cqrs、Godot 与生成器的构建警告
- 清理 GFramework.Core 与 GFramework.Cqrs 中的大量低风险 Meziantou 警告

- 修复 GFramework.Godot 运行时中的 ConfigureAwait、StringComparison 与参数校验告警

- 调整 Core SourceGenerators 中的字符串比较、文件命名与局部长方法问题

- 拆分部分配置与缓存辅助类型文件以消除 file/type mismatch 告警

- 更新 warning reduction 跟踪与执行记录,保留下一批结构性告警的恢复点
2026-04-18 16:47:44 +08:00

35 lines
1.2 KiB
C#

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