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