feat(logging): 添加日志级别配置和工厂提供程序

- 为 ILoggerFactory 接口添加 minLevel 参数支持
- 实现 ConsoleLoggerFactoryProvider 和 GodotLoggerFactoryProvider
- 创建 LoggerFactoryResolver 用于管理日志工厂提供程序
- 为 NoopLoggerFactory 添加日志级别参数
- 在 LogAttribute 中添加 MinLevel 属性
- 更新项目引用以支持日志级别配置功能
This commit is contained in:
GwWuYou 2026-01-01 20:37:12 +08:00
parent 42d6590edd
commit 435c3398fc
10 changed files with 85 additions and 6 deletions

View File

@ -9,6 +9,7 @@ public interface ILoggerFactory
/// 根据指定的名称获取日志记录器实例 /// 根据指定的名称获取日志记录器实例
/// </summary> /// </summary>
/// <param name="name">日志记录器的名称</param> /// <param name="name">日志记录器的名称</param>
/// <param name="minLevel">最小日志级别</param>
/// <returns>指定名称的日志记录器实例</returns> /// <returns>指定名称的日志记录器实例</returns>
ILogger GetLogger(string name); ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info);
} }

View File

@ -0,0 +1,15 @@
namespace GFramework.Core.Abstractions.logging;
/// <summary>
/// 定义日志工厂提供者的接口,用于创建具有指定名称和最小日志级别的日志记录器
/// </summary>
public interface ILoggerFactoryProvider
{
/// <summary>
/// 创建一个日志记录器实例
/// </summary>
/// <param name="name">日志记录器的名称,用于标识特定的日志源</param>
/// <param name="minLevel">日志记录器的最小日志级别,低于此级别的日志消息将被忽略</param>
/// <returns>配置了指定名称和最小日志级别的ILogger实例</returns>
ILogger CreateLogger(string name, LogLevel minLevel);
}

View File

@ -11,9 +11,10 @@ public class ConsoleLoggerFactory : ILoggerFactory
/// 获取指定名称的控制台日志记录器实例 /// 获取指定名称的控制台日志记录器实例
/// </summary> /// </summary>
/// <param name="name">日志记录器的名称</param> /// <param name="name">日志记录器的名称</param>
/// <param name="minLevel">日志记录器的最小日志级别</param>
/// <returns>控制台日志记录器实例</returns> /// <returns>控制台日志记录器实例</returns>
public ILogger GetLogger(string name) public ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info)
{ {
return new ConsoleLogger(name); return new ConsoleLogger(name, minLevel);
} }
} }

View File

@ -0,0 +1,18 @@
using GFramework.Core.Abstractions.logging;
namespace GFramework.Core.logging;
/// <summary>
/// 控制台日志记录器工厂提供程序,用于创建控制台日志记录器实例
/// </summary>
public sealed class ConsoleLoggerFactoryProvider : ILoggerFactoryProvider
{
/// <summary>
/// 创建一个日志记录器实例
/// </summary>
/// <param name="name">日志记录器的名称,用于标识特定的日志源</param>
/// <param name="minLevel">日志记录器的最小日志级别,低于此级别的日志消息将被忽略</param>
/// <returns>配置了指定名称和最小日志级别的ILogger实例</returns>
public ILogger CreateLogger(string name, LogLevel minLevel)
=> new ConsoleLoggerFactory().GetLogger(name, minLevel);
}

View File

@ -0,0 +1,18 @@
using GFramework.Core.Abstractions.logging;
namespace GFramework.Core.logging;
/// <summary>
/// 日志工厂提供程序解析器,用于管理和提供日志工厂提供程序实例
/// </summary>
public static class LoggerFactoryResolver
{
/// <summary>
/// 获取或设置当前的日志工厂提供程序
/// </summary>
/// <value>
/// 日志工厂提供程序实例,默认为控制台日志工厂提供程序
/// </value>
public static ILoggerFactoryProvider Provider { get; set; }
= new ConsoleLoggerFactoryProvider();
}

View File

@ -11,8 +11,9 @@ public class NoopLoggerFactory : ILoggerFactory
/// 获取指定名称的无操作日志记录器 /// 获取指定名称的无操作日志记录器
/// </summary> /// </summary>
/// <param name="name">日志记录器的名称</param> /// <param name="name">日志记录器的名称</param>
/// <param name="minLevel">日志记录器的最小日志级别</param>
/// <returns>返回一个NoopLogger实例该实例不执行任何实际的日志记录操作</returns> /// <returns>返回一个NoopLogger实例该实例不执行任何实际的日志记录操作</returns>
public ILogger GetLogger(string name) public ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info)
{ {
return new NoopLogger(); return new NoopLogger();
} }

View File

@ -12,8 +12,8 @@ public class GodotLoggerFactory : ILoggerFactory
/// </summary> /// </summary>
/// <param name="name">日志记录器的名称</param> /// <param name="name">日志记录器的名称</param>
/// <returns>返回GodotLogger类型的日志记录器实例</returns> /// <returns>返回GodotLogger类型的日志记录器实例</returns>
public ILogger GetLogger(string name) public ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info)
{ {
return new GodotLogger(name); return new GodotLogger(name, minLevel);
} }
} }

View File

@ -0,0 +1,18 @@
using GFramework.Core.Abstractions.logging;
namespace GFramework.Godot.logging;
/// <summary>
/// Godot日志工厂提供程序用于创建Godot日志记录器实例
/// </summary>
public sealed class GodotLoggerFactoryProvider : ILoggerFactoryProvider
{
/// <summary>
/// 创建指定名称和最小日志级别的日志记录器
/// </summary>
/// <param name="name">日志记录器的名称</param>
/// <param name="minLevel">日志记录器的最小日志级别</param>
/// <returns>返回配置好的Godot日志记录器实例</returns>
public ILogger CreateLogger(string name, LogLevel minLevel)
=> new GodotLoggerFactory().GetLogger(name, minLevel);
}

View File

@ -14,4 +14,7 @@
<ItemGroup> <ItemGroup>
<Using Include="GFramework.SourceGenerators.Abstractions"/> <Using Include="GFramework.SourceGenerators.Abstractions"/>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\GFramework.Core.Abstractions\GFramework.Core.Abstractions.csproj" PrivateAssets="all"/>
</ItemGroup>
</Project> </Project>

View File

@ -1,5 +1,6 @@
#nullable enable #nullable enable
using System; using System;
using GFramework.Core.Abstractions.logging;
namespace GFramework.SourceGenerators.Abstractions.logging; namespace GFramework.SourceGenerators.Abstractions.logging;
@ -37,4 +38,7 @@ public sealed class LogAttribute : Attribute
/// <summary>访问修饰符</summary> /// <summary>访问修饰符</summary>
public string AccessModifier { get; set; } = "private"; public string AccessModifier { get; set; } = "private";
/// <summary>最小日志级别</summary>
public LogLevel MinLevel { get; set; } = LogLevel.Info;
} }