Files
pig-farm-controller/design/provide-logger-with-mothed/task-middleware.md
2025-11-05 18:38:41 +08:00

2.1 KiB
Raw Blame History

  • internal/app/middleware/auth.go
    • 中间件函数改造 (AuthMiddleware):
      • AuthMiddleware 返回的 echo.HandlerFunc 内部,获取 echo.Contextrequest.Context() 作为 upstreamCtx
      • 使用 newCtx, logger := logs.Trace(upstreamCtx, context.Background(), "AuthMiddleware") 来创建 newCtxlogger 实例。
      • 使用 c.SetRequest(c.Request().WithContext(newCtx)) 将更新后的 newCtx 写入 echo.Context,以便后续处理链使用。
      • 将所有对 controller.SendErrorWithStatus 的调用替换为 controller.SendErrorWithAudit
      • 确保 controller.SendErrorWithAudit 接收 newCtx 作为第一个参数,并提供适当的 actionType, description, targetResource
        • 例如,对于“请求未包含授权标头”的错误,actionType 可以是“认证失败”,description 是“请求未包含授权标头”, targetResourcenil
        • 对于“无效的Token”错误actionType 可以是“认证失败”,description 是“无效的Token”targetResourcetokenString
      • AuthMiddleware 内部,如果需要日志记录(例如 tokenService.ParseToken 失败或 userRepo.FindByID 失败),使用新创建的 logger 实例进行日志输出。
      • 关键: 使用 c.SetRequest(c.Request().WithContext(newCtx)) 将更新后的 Context 写回 echo.Context ,以便传递给后续的中间件和 Controller
  • internal/app/middleware/audit.go
    • 改造动作:
      • 检查并重构所有日志记录中间件。
      • 中间件应该从请求的 c.Request().Context() 中提取 upstreamCtx
      • 使用 logs.Tracelogs.AddFuncName 创建新的 ContextLogger
      • 关键: 使用 c.SetRequest(c.Request().WithContext(newCtx)) 将更新后的 Context 写回 echo.Context ,以便传递给后续的中间件和 Controller