From 435c3398fc7f453b3fd73309f296148e75f178e6 Mon Sep 17 00:00:00 2001 From: GwWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Thu, 1 Jan 2026 20:37:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(logging):=20=E6=B7=BB=E5=8A=A0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E7=BA=A7=E5=88=AB=E9=85=8D=E7=BD=AE=E5=92=8C=E5=B7=A5?= =?UTF-8?q?=E5=8E=82=E6=8F=90=E4=BE=9B=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 ILoggerFactory 接口添加 minLevel 参数支持 - 实现 ConsoleLoggerFactoryProvider 和 GodotLoggerFactoryProvider - 创建 LoggerFactoryResolver 用于管理日志工厂提供程序 - 为 NoopLoggerFactory 添加日志级别参数 - 在 LogAttribute 中添加 MinLevel 属性 - 更新项目引用以支持日志级别配置功能 --- .../logging/ILoggerFactory.cs | 3 ++- .../logging/ILoggerFactoryProvider.cs | 15 +++++++++++++++ .../logging/ConsoleLoggerFactory.cs | 5 +++-- .../logging/ConsoleLoggerFactoryProvider.cs | 18 ++++++++++++++++++ .../logging/LoggerFactoryResolver.cs | 18 ++++++++++++++++++ GFramework.Core/logging/NoopLoggerFactory.cs | 3 ++- GFramework.Godot/logging/GodotLoggerFactory.cs | 4 ++-- .../logging/GodotLoggerFactoryProvider.cs | 18 ++++++++++++++++++ ...mework.SourceGenerators.Abstractions.csproj | 3 +++ .../logging/LogAttribute.cs | 4 ++++ 10 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 GFramework.Core.Abstractions/logging/ILoggerFactoryProvider.cs create mode 100644 GFramework.Core/logging/ConsoleLoggerFactoryProvider.cs create mode 100644 GFramework.Core/logging/LoggerFactoryResolver.cs create mode 100644 GFramework.Godot/logging/GodotLoggerFactoryProvider.cs diff --git a/GFramework.Core.Abstractions/logging/ILoggerFactory.cs b/GFramework.Core.Abstractions/logging/ILoggerFactory.cs index af7c876..f0e0a6d 100644 --- a/GFramework.Core.Abstractions/logging/ILoggerFactory.cs +++ b/GFramework.Core.Abstractions/logging/ILoggerFactory.cs @@ -9,6 +9,7 @@ public interface ILoggerFactory /// 根据指定的名称获取日志记录器实例 /// /// 日志记录器的名称 + /// 最小日志级别 /// 指定名称的日志记录器实例 - ILogger GetLogger(string name); + ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info); } \ No newline at end of file diff --git a/GFramework.Core.Abstractions/logging/ILoggerFactoryProvider.cs b/GFramework.Core.Abstractions/logging/ILoggerFactoryProvider.cs new file mode 100644 index 0000000..8471658 --- /dev/null +++ b/GFramework.Core.Abstractions/logging/ILoggerFactoryProvider.cs @@ -0,0 +1,15 @@ +namespace GFramework.Core.Abstractions.logging; + +/// +/// 定义日志工厂提供者的接口,用于创建具有指定名称和最小日志级别的日志记录器 +/// +public interface ILoggerFactoryProvider +{ + /// + /// 创建一个日志记录器实例 + /// + /// 日志记录器的名称,用于标识特定的日志源 + /// 日志记录器的最小日志级别,低于此级别的日志消息将被忽略 + /// 配置了指定名称和最小日志级别的ILogger实例 + ILogger CreateLogger(string name, LogLevel minLevel); +} \ No newline at end of file diff --git a/GFramework.Core/logging/ConsoleLoggerFactory.cs b/GFramework.Core/logging/ConsoleLoggerFactory.cs index 711a02b..e8f2481 100644 --- a/GFramework.Core/logging/ConsoleLoggerFactory.cs +++ b/GFramework.Core/logging/ConsoleLoggerFactory.cs @@ -11,9 +11,10 @@ public class ConsoleLoggerFactory : ILoggerFactory /// 获取指定名称的控制台日志记录器实例 /// /// 日志记录器的名称 + /// 日志记录器的最小日志级别 /// 控制台日志记录器实例 - public ILogger GetLogger(string name) + public ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info) { - return new ConsoleLogger(name); + return new ConsoleLogger(name, minLevel); } } \ No newline at end of file diff --git a/GFramework.Core/logging/ConsoleLoggerFactoryProvider.cs b/GFramework.Core/logging/ConsoleLoggerFactoryProvider.cs new file mode 100644 index 0000000..5da073e --- /dev/null +++ b/GFramework.Core/logging/ConsoleLoggerFactoryProvider.cs @@ -0,0 +1,18 @@ +using GFramework.Core.Abstractions.logging; + +namespace GFramework.Core.logging; + +/// +/// 控制台日志记录器工厂提供程序,用于创建控制台日志记录器实例 +/// +public sealed class ConsoleLoggerFactoryProvider : ILoggerFactoryProvider +{ + /// + /// 创建一个日志记录器实例 + /// + /// 日志记录器的名称,用于标识特定的日志源 + /// 日志记录器的最小日志级别,低于此级别的日志消息将被忽略 + /// 配置了指定名称和最小日志级别的ILogger实例 + public ILogger CreateLogger(string name, LogLevel minLevel) + => new ConsoleLoggerFactory().GetLogger(name, minLevel); +} \ No newline at end of file diff --git a/GFramework.Core/logging/LoggerFactoryResolver.cs b/GFramework.Core/logging/LoggerFactoryResolver.cs new file mode 100644 index 0000000..5cabcf0 --- /dev/null +++ b/GFramework.Core/logging/LoggerFactoryResolver.cs @@ -0,0 +1,18 @@ +using GFramework.Core.Abstractions.logging; + +namespace GFramework.Core.logging; + +/// +/// 日志工厂提供程序解析器,用于管理和提供日志工厂提供程序实例 +/// +public static class LoggerFactoryResolver +{ + /// + /// 获取或设置当前的日志工厂提供程序 + /// + /// + /// 日志工厂提供程序实例,默认为控制台日志工厂提供程序 + /// + public static ILoggerFactoryProvider Provider { get; set; } + = new ConsoleLoggerFactoryProvider(); +} \ No newline at end of file diff --git a/GFramework.Core/logging/NoopLoggerFactory.cs b/GFramework.Core/logging/NoopLoggerFactory.cs index 14d8628..1d493e6 100644 --- a/GFramework.Core/logging/NoopLoggerFactory.cs +++ b/GFramework.Core/logging/NoopLoggerFactory.cs @@ -11,8 +11,9 @@ public class NoopLoggerFactory : ILoggerFactory /// 获取指定名称的无操作日志记录器 /// /// 日志记录器的名称 + /// 日志记录器的最小日志级别 /// 返回一个NoopLogger实例,该实例不执行任何实际的日志记录操作 - public ILogger GetLogger(string name) + public ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info) { return new NoopLogger(); } diff --git a/GFramework.Godot/logging/GodotLoggerFactory.cs b/GFramework.Godot/logging/GodotLoggerFactory.cs index dda8610..e8a8347 100644 --- a/GFramework.Godot/logging/GodotLoggerFactory.cs +++ b/GFramework.Godot/logging/GodotLoggerFactory.cs @@ -12,8 +12,8 @@ public class GodotLoggerFactory : ILoggerFactory /// /// 日志记录器的名称 /// 返回GodotLogger类型的日志记录器实例 - public ILogger GetLogger(string name) + public ILogger GetLogger(string name, LogLevel minLevel = LogLevel.Info) { - return new GodotLogger(name); + return new GodotLogger(name, minLevel); } } \ No newline at end of file diff --git a/GFramework.Godot/logging/GodotLoggerFactoryProvider.cs b/GFramework.Godot/logging/GodotLoggerFactoryProvider.cs new file mode 100644 index 0000000..13b629f --- /dev/null +++ b/GFramework.Godot/logging/GodotLoggerFactoryProvider.cs @@ -0,0 +1,18 @@ +using GFramework.Core.Abstractions.logging; + +namespace GFramework.Godot.logging; + +/// +/// Godot日志工厂提供程序,用于创建Godot日志记录器实例 +/// +public sealed class GodotLoggerFactoryProvider : ILoggerFactoryProvider +{ + /// + /// 创建指定名称和最小日志级别的日志记录器 + /// + /// 日志记录器的名称 + /// 日志记录器的最小日志级别 + /// 返回配置好的Godot日志记录器实例 + public ILogger CreateLogger(string name, LogLevel minLevel) + => new GodotLoggerFactory().GetLogger(name, minLevel); +} \ No newline at end of file diff --git a/GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj b/GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj index f7470af..fe720ee 100644 --- a/GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj +++ b/GFramework.SourceGenerators.Abstractions/GFramework.SourceGenerators.Abstractions.csproj @@ -14,4 +14,7 @@ + + + diff --git a/GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs b/GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs index 52e7325..890401f 100644 --- a/GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs +++ b/GFramework.SourceGenerators.Abstractions/logging/LogAttribute.cs @@ -1,5 +1,6 @@ #nullable enable using System; +using GFramework.Core.Abstractions.logging; namespace GFramework.SourceGenerators.Abstractions.logging; @@ -37,4 +38,7 @@ public sealed class LogAttribute : Attribute /// 访问修饰符 public string AccessModifier { get; set; } = "private"; + + /// 最小日志级别 + public LogLevel MinLevel { get; set; } = LogLevel.Info; } \ No newline at end of file