GFramework/docs/zh-CN/source-generators/logging-generator.md
GeWuYou 1ab615db26 docs(source-generators): 更新文档结构并调整Godot版本信息
- 将Source Generators概述文档从overview重命名为index
- 更新所有相关文档中的链接指向新的index文件
- 移除Godot文档中的许可证和版本信息冗余内容
- 统一Godot版本要求从4.5.1+到4.6
- 删除各模块文档末尾的相关链接部分
- 优化文档结构提升可读性
2026-02-11 15:57:40 +08:00

161 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 日志生成器
> 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
}
```
---
**相关文档**
- [Source Generators 概述](./index)
- [枚举扩展生成器](./enum-generator)
- [规则生成器](./rule-generator)