mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 16:55:57 +08:00
- 清理 GFramework.Core 与 GFramework.Cqrs 中的大量低风险 Meziantou 警告 - 修复 GFramework.Godot 运行时中的 ConfigureAwait、StringComparison 与参数校验告警 - 调整 Core SourceGenerators 中的字符串比较、文件命名与局部长方法问题 - 拆分部分配置与缓存辅助类型文件以消除 file/type mismatch 告警 - 更新 warning reduction 跟踪与执行记录,保留下一批结构性告警的恢复点
35 lines
1.2 KiB
C#
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));
|
|
}
|
|
}
|