GFramework/docs/zh-CN/source-generators/logging-generator.md
GeWuYou 6d398a515b docs(guide): 添加 ContextAware 生成器文档并更新相关链接
- 新增 ContextAware 生成器完整文档,介绍自动实现 IContextAware 接口的功能
- 更新索引页面中的相关链接,替换规则生成器为 ContextAware 生成器
- 修改基础使用示例中的命名空间引用和代码实现细节
- 补充测试场景配置和多架构场景的使用说明
- 添加最佳实践和诊断信息相关内容
2026-03-07 22:51:42 +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)
- [ContextAware 生成器](./context-aware-generator)