Files
pig-farm-controller/design/provide-logger-with-mothed/task-list.md

83 lines
4.0 KiB
Markdown
Raw Normal View History

2025-11-03 21:11:19 +08:00
### 重构任务清单:纯 Context 驱动的调用链追踪
---
#### 1. 核心改造 (`logs` 包)
2025-11-03 23:17:06 +08:00
- **`internal/infra/logs/logs.go` (`logs.Logger` - 内部实现,非注入)**
- **核心包级函数实现 (根据 `implementation.md` 描述)**:
2025-11-05 16:00:43 +08:00
- [x] 实现 `AddCompName(ctx context.Context, compName string) context.Context`
- [x] 实现
2025-11-03 23:17:06 +08:00
`AddFuncName(upstreamCtx context.Context, selfCtx context.Context, funcName string) context.Context`
2025-11-05 16:00:43 +08:00
- [x] 实现 `GetLogger(ctx context.Context) *Logger`
- [x] 实现
2025-11-03 23:17:06 +08:00
`Trace(upstreamCtx context.Context, selfCtx context.Context, funcName string) (context.Context, *Logger)`
- **`Logger` 结构体改造**:
2025-11-05 16:00:43 +08:00
- [x] 无
2025-11-03 23:17:06 +08:00
- **`GormLogger` 改造**:
2025-11-05 16:00:43 +08:00
- [x] 修改 `GormLogger.Info` 方法,从传入的 `ctx` 中获取 `logger` 实例,并使用该实例进行日志记录。
- [x] 修改 `GormLogger.Warn` 方法,从传入的 `ctx` 中获取 `logger` 实例,并使用该实例进行日志记录。
- [x] 修改 `GormLogger.Error` 方法,从传入的 `ctx` 中获取 `logger` 实例,并使用该实例进行日志记录。
- [x] 修改 `GormLogger.Trace` 方法,从传入的 `ctx` 中获取 `logger` 实例,并使用该实例进行日志记录。特别是
2025-11-03 23:17:06 +08:00
`With(fields...)` 的调用需要调整。
2025-11-03 21:11:19 +08:00
---
#### 2. 依赖注入与结构体改造
2025-11-03 23:17:06 +08:00
- **`internal/core/application.go`**:
2025-11-05 16:00:43 +08:00
- [x] 移除 `Application` 结构体中的 `Logger *logs.Logger` 成员。
- [x] 修改 `NewApplication` 函数,使其不再创建 `logger`,而是创建根 `context.Background()`
- [x] 调整 `NewApplication`,将根 `context` 传递给 `initInfrastructure`, `initDomainServices`, `initAppServices`
2025-11-03 23:17:06 +08:00
`api.NewAPI`
2025-11-05 16:00:43 +08:00
- [x] 移除 `Application` 结构体中所有对 `app.Logger` 的直接调用,改为通过 `context` 获取 `Logger`
2025-11-03 21:11:19 +08:00
2025-11-03 23:17:06 +08:00
- **`internal/core/component_initializers.go`**:
2025-11-05 16:00:43 +08:00
- [x] **修改所有组件结构体定义**: 遍历所有相关组件Controllers, Services, Repositories 等),将其结构体中的
2025-11-03 23:17:06 +08:00
`logger *logs.Logger` 成员变量替换为 `selfCtx context.Context`
2025-11-05 16:00:43 +08:00
- [x] **重构所有 `init...` 函数**:
2025-11-03 23:17:06 +08:00
- 移除所有 `logger *logs.Logger` 参数,改为接收 `ctx context.Context`
- 在每个 `init...` 函数内部,为即将创建的组件生成其专属的 `selfCtx`。例如:
`selfCtx := logs.AddCompName(ctx, 'ComponentName')`
- 将这个 `selfCtx` 注入到组件的构造函数中,并由组件保存为 `selfCtx` 成员。
2025-11-03 21:11:19 +08:00
---
#### 3. 全局方法签名改造:传递 `context.Context`
**以下所有列出的组件,其所有公共方法都需要进行签名改造,将 `ctx context.Context` 作为第一个参数。**
##### 3.1. API 层
2025-11-03 23:17:06 +08:00
[api](./task-api.md)
[controller](./task-controller.md)
[middleware](./task-middleware.md)
[webhook](./task-webhook.md)
2025-11-03 21:11:19 +08:00
##### 3.2. 应用层 (Application Services)
2025-11-03 23:17:06 +08:00
[service](./task-service.md)
2025-11-03 21:11:19 +08:00
##### 3.3. 领域层 (Domain Services)
2025-11-03 23:17:06 +08:00
[domain](./task-domain.md)
2025-11-03 21:11:19 +08:00
##### 3.4. 基础设施层 (Infrastructure)
2025-11-03 23:17:06 +08:00
[repository](./task-repository.md)
[infra-other](./task-infra.md)
2025-11-03 21:11:19 +08:00
---
#### 4. 日志调用点及方法内部逻辑改造
2025-11-05 23:57:09 +08:00
- [x] **遍历所有业务方法** (针对上述所有列出的组件的公共方法):
- [x] **定位旧日志**: 搜索所有对旧 `z.logger.*` 成员的调用。
- [x] **改造方法入口** (对于非 Controller 方法):
2025-11-03 23:17:06 +08:00
1. 在方法开始处,使用作为参数传入的 `ctx` (作为 `upstreamCtx`) 和组件自身持有的 `z.selfCtx`,调用 `logs.Trace`
- `newCtx, logger := logs.Trace(ctx, z.selfCtx, 'MethodName')`
2. 将所有旧的 `z.logger.*(...)` 调用,替换为使用新获取的 `logger.*(...)`
2025-11-05 23:57:09 +08:00
- [x] **改造下游调用**:
2025-11-03 23:17:06 +08:00
1. 在方法内部,当需要调用其他组件的方法时(如下游服务),**必须传递 `newCtx`**。
- `err := z.downstreamService.DoSomething(newCtx, data)`