mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 00:39:00 +08:00
- 清理 GFramework.Core 与 GFramework.Cqrs 中的大量低风险 Meziantou 警告 - 修复 GFramework.Godot 运行时中的 ConfigureAwait、StringComparison 与参数校验告警 - 调整 Core SourceGenerators 中的字符串比较、文件命名与局部长方法问题 - 拆分部分配置与缓存辅助类型文件以消除 file/type mismatch 告警 - 更新 warning reduction 跟踪与执行记录,保留下一批结构性告警的恢复点
79 lines
2.3 KiB
C#
79 lines
2.3 KiB
C#
using GFramework.Core.Abstractions.Logging;
|
|
using GFramework.Core.Logging.Appenders;
|
|
|
|
namespace GFramework.Core.Logging;
|
|
|
|
/// <summary>
|
|
/// 可配置的 Logger 工厂。
|
|
/// </summary>
|
|
internal sealed class ConfigurableLoggerFactory : ILoggerFactory, IDisposable
|
|
{
|
|
private readonly ILogAppender[] _appenders;
|
|
private readonly LoggingConfiguration _config;
|
|
private bool _disposed;
|
|
|
|
/// <summary>
|
|
/// 初始化一个基于日志配置创建输出管线的工厂实例。
|
|
/// </summary>
|
|
/// <param name="config">日志配置。</param>
|
|
public ConfigurableLoggerFactory(LoggingConfiguration config)
|
|
{
|
|
_config = config ?? throw new ArgumentNullException(nameof(config));
|
|
_appenders = config.Appenders.Select(LoggingConfigurationLoader.CreateAppender).ToArray();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 释放内部 Appender 持有的资源。
|
|
/// </summary>
|
|
public void Dispose()
|
|
{
|
|
if (_disposed)
|
|
{
|
|
return;
|
|
}
|
|
|
|
foreach (var appender in _appenders)
|
|
{
|
|
if (appender is IDisposable disposable)
|
|
{
|
|
disposable.Dispose();
|
|
}
|
|
}
|
|
|
|
_disposed = true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 为指定名称创建日志记录器,并应用最匹配的命名空间级别配置。
|
|
/// </summary>
|
|
/// <param name="name">日志记录器名称。</param>
|
|
/// <param name="minLevel">调用方传入的默认最小级别。</param>
|
|
/// <returns>可写入日志的记录器实例。</returns>
|
|
public ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info)
|
|
{
|
|
var effectiveLevel = _config.MinLevel;
|
|
|
|
foreach (var kvp in _config.LoggerLevels)
|
|
{
|
|
if (string.Equals(name, kvp.Key, StringComparison.Ordinal) ||
|
|
name.StartsWith(kvp.Key + ".", StringComparison.Ordinal))
|
|
{
|
|
effectiveLevel = kvp.Value;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_appenders.Length == 0)
|
|
{
|
|
return new ConsoleLogger(name, effectiveLevel);
|
|
}
|
|
|
|
if (_appenders.Length == 1 && _appenders[0] is ConsoleAppender)
|
|
{
|
|
return new ConsoleLogger(name, effectiveLevel);
|
|
}
|
|
|
|
return new CompositeLogger(name, effectiveLevel, _appenders);
|
|
}
|
|
}
|