GFramework/GFramework.Core/Logging/CachedLoggerFactory.cs
GeWuYou fb14d7122c docs(style): 更新文档中的命名空间导入格式
- 将所有小写的命名空间导入更正为首字母大写格式
- 统一 GFramework 框架的命名空间引用规范
- 修复 core、ecs、godot 等模块的命名空间导入错误
- 标准化文档示例代码中的 using 语句格式
- 确保所有文档中的命名空间引用保持一致性
- 更新 global using 语句以匹配正确的命名空间格式
2026-03-10 07:18:49 +08:00

34 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();
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));
}
}