日志生成器
GFramework.SourceGenerators 自动生成日志代码,减少样板代码
概述
日志生成器是一个 Source Generator,它会自动为标记了 [Log] 特性的类生成 Logger 字段和日志方法调用。这消除了手动编写日志代码的需要,让开发者专注于业务逻辑。
基本用法
标记类
csharp
using GFramework.SourceGenerators.Attributes;
[Log]
public partial class MyService
{
public void DoSomething()
{
// 自动生成 Logger 字段
// 自动生成日志调用
Logger.Info("执行操作");
}
}生成代码
上面的代码会被编译时转换为:
csharp
public partial class MyService
{
// 自动生成的字段
[CompilerGenerated]
private ILogger _logger;
// 自动生成的属性
[CompilerGenerated]
public ILogger Logger
{
get
{
if (_logger == null)
{
_logger = LoggerFactory.CreateLogger<MyService>();
}
return _logger;
}
}
}日志级别
生成的日志方法支持多种级别:
csharp
[Log]
public partial class MyClass
{
public void Example()
{
// 调试信息
Logger.Debug($"调试信息: {value}");
// 普通信息
Logger.Info("操作成功");
// 警告
Logger.Warning($"警告: {message}");
// 错误
Logger.Error($"错误: {ex.Message}");
// 严重错误
Logger.Critical("系统故障");
}
}自定义日志类别
csharp
[Log(LogCategory.Gameplay)]
public partial class GameplaySystem
{
// 日志会标记为 Gameplay 类别
public void Update()
{
Logger.Info("游戏逻辑更新");
}
}与其他模块集成
与 Godot 集成
csharp
[Log]
[ContextAware]
public partial class GodotController : Node
{
public override void _Ready()
{
Logger.Info("控制器已准备就绪");
}
}与架构集成
csharp
[Log]
public partial class MySystem : AbstractSystem
{
protected override void OnInit()
{
Logger.Info("系统初始化");
}
}配置选项
禁用自动生成
csharp
// 禁用自动日志调用生成
[Log(AutoLog = false)]
public partial class MyClass
{
// 仍会生成 Logger 字段,但不会自动生成日志调用
public void DoSomething()
{
// 需要手动调用 Logger
Logger.Info("手动日志");
}
}自定义字段名称
csharp
[Log(FieldName = "_customLogger")]
public partial class MyClass
{
// Logger 字段名称为 _customLogger
}相关文档: