starlog/docs/MIGRATION.md

140 lines
3.7 KiB
Markdown
Raw Normal View History

2026-03-19 16:37:57 +08:00
# MIGRATION (V1)
本文档说明从旧版本/旧用法迁移到当前 `starlog` 的推荐路径。
## 先说结论
- 当前版本是 **V1 兼容迁移阶段**
- **旧 API 仍可继续使用,不需要立即重写。**
- 推荐逐步迁移到 `Config` 快照方式和新能力(结构化、多 sink、脱敏、测试 hook
## 兼容性承诺V1
1. 不移除旧 API。
2. 旧调用方式保持可运行。
3. 新能力以“增量引入”为主,不要求一次性改造。
## 推荐迁移顺序
### 第 0 步:先不改业务逻辑
如果你当前线上稳定,可以先升级依赖并保持原写法。
### 第 1 步:把“多项配置”改为一次性更新
旧写法(仍可用):
```go
log.SetShowColor(false)
log.SetShowLevel(true)
log.SetShowFlag(false)
log.SetLevel(starlog.LvInfo)
```
推荐写法V1 新增):
```go
log.UpdateConfig(func(cfg *starlog.Config) {
cfg.ShowColor = false
cfg.ShowLevel = true
cfg.ShowFlag = false
cfg.Level = starlog.LvInfo
})
```
收益:
- 多项配置原子生效,减少并发中间态。
- 配置修改更集中,便于审计和 review。
### 第 2 步:逐步引入结构化字段与 Context
```go
log.WithField("trace_id", traceID).Info("request done")
log.WithContext(ctx).Error("call downstream failed")
```
### 第 3 步:输出链路升级
- 单路写入升级到 `SetSinks(...)` / `MultiSink`
- 需要分级分文件时使用 `RouteHandler`
- 归档建议走 `RotatePolicy` 主路径,并叠加 `RotateManageOptions`
### 第 4 步:安全与测试
- 脱敏:`SetRedactor` / `AddRedactRule`
- 测试断言:`Observer` / `TestHook`
### 第 5 步:生命周期收口(推荐)
旧写法(仍可用):
```go
defer starlog.CloseStd()
```
推荐写法:
```go
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
defer starlog.Shutdown(ctx)
```
说明:
- `Shutdown(ctx)` 会等待异步 handler drain并统一关闭资源。
- `Close()` 仍可用,但不等待异步 handler 队列。
## 常见旧写法到推荐写法
1. 配置项逐条 setter
推荐:`UpdateConfig` 批量改
2. 只打印字符串
推荐:关键路径增加 `WithField(s)``WithError`
3. 仅 writer 输出
推荐:`MultiSink` + `RouteHandler` 做按级别拆分
4. 原生 `log.Logger` 接入
推荐:`AsStdlibLoggerWithOptions`prefix/flags/level-mapper
5. 手工配置大量 setter
推荐:`NewProductionConfig/NewDevelopmentConfig` + `ApplyProductionConfig/ApplyDevelopmentConfig`
6.`StartArchive` 轮转启动
推荐:`StartRotatePolicy` / `StartManagedRotatePolicy`,模板场景可直接用 `StartRotateByTime/BySize/ByTimeSize`
## 旧 API 仍可用(重要)
以下旧/兼容路径当前仍可用:
- 旧 setter/getter 全部可用
- 历史错拼兼容名仍可用(如 `EnbaleWrite``IsWriteStoed``HookBeforArchive`
- `Archive` 旧模型仍可用(建议新代码优先 `RotatePolicy`
- 旧生命周期入口仍可用(如 `CloseStd``Close`),但建议新代码优先 `Shutdown(ctx)` / `CloseLogFile`
## 升级后验证建议
1. 跑单元测试:`go test ./...`
2. 跑并发检测:`go test -race ./...`
3. 跑规则检查:`sentrux check .`
4. 重点验证:
- 级别过滤是否符合预期
- 归档文件数量/保留策略
- 异步丢弃计数和写入错误计数
## 何时需要进一步迁移
如果你符合以下场景,建议优先推进推荐写法:
- 多 goroutine 同时改日志配置
- 需要跨模块统一日志字段规范
- 需要审计日志(脱敏、分级路由、归档治理)
---
如果你希望,我可以基于你当前项目的实际日志初始化代码,给出一份“一次改完可落地”的迁移 patch 方案。