Files
pig-farm-controller/design/provide-logger-with-mothed/task-webhook.md
2025-11-05 19:57:30 +08:00

3.2 KiB
Raw Blame History

  • internal/app/webhook/chirp_stack.go (webhook.ChirpStackListener)
    • 结构体改造:
      • 移除 ChirpStackListener 结构体中的 logger *logs.Logger 成员。
      • 新增 selfCtx context.Context 成员。
    • 构造函数改造 (NewChirpStackListener):
      • 修改函数签名,移除 logger *logs.Logger 参数,改为接收 ctx context.Context
      • 在函数内部,为 ChirpStackListener 创建其专属的 selfCtx selfCtx := logs.AddCompName(ctx, "ChirpStackListener")
      • 将这个 selfCtx 赋值给 ChirpStackListener 结构体的 selfCtx 成员。
    • 公共方法改造 (Handler):
      • Handler 方法返回 http.HandlerFunc。在返回的 http.HandlerFunc 内部,获取 r.Context() 作为 upstreamCtx
      • go c.handler(b, event) 调用之前,将 upstreamCtx 传递给 c.handler 方法,即 go c.handler(upstreamCtx, b, event)
      • 将所有对 c.logger.Errorf 的调用替换为 logger.Errorf (在 handler 方法中处理)。
    • 内部辅助方法改造 (handler, handleUpEvent, handleStatusEvent, handleAckEvent, handleLogEvent, handleJoinEvent, handleTxAckEvent, handleLocationEvent, handleIntegrationEvent, recordSensorData):
      • 修改方法签名,添加 ctx context.Context 作为第一个参数。
      • 在每个方法入口处,使用 newCtx, logger := logs.Trace(ctx, c.selfCtx, "MethodName") 获取新的 context.Contextlogger 实例。
      • 将所有对 c.logger.Errorf, c.logger.Infof, c.logger.Warnf 的调用替换为 logger.Errorf, logger.Infof, logger.Warnf
      • 确保所有对 c.sensorDataRepo, c.deviceRepo, c.areaControllerRepo, c.deviceCommandLogRepo, c.pendingCollectionRepo 等依赖的调用都将 newCtx 作为第一个参数传递。
  • internal/app/webhook/placeholder_listener.go (webhook.PlaceholderListener)
    • 结构体改造:
      • 移除 PlaceholderListener 结构体中的 logger *logs.Logger 成员。
      • 新增 selfCtx context.Context 成员。
    • 构造函数改造 (NewPlaceholderListener):
      • 修改函数签名,移除 logger *logs.Logger 参数,改为接收 ctx context.Context
      • 在函数内部,为 PlaceholderListener 创建其专属的 selfCtx selfCtx := logs.AddCompName(ctx, "PlaceholderListener")
      • 将这个 selfCtx 赋值给 PlaceholderListener 结构体的 selfCtx 成员。
      • 使用 newCtx, logger := logs.Trace(ctx, selfCtx, "NewPlaceholderListener") 获取 logger 实例,并替换 logger.Info 调用。
    • 公共方法改造 (Handler):
      • Handler 方法返回的 http.HandlerFunc 内部,获取 r.Context() 作为 upstreamCtx
      • 使用 newCtx, logger := logs.Trace(upstreamCtx, p.selfCtx, "Handler") 获取 logger 实例。
      • 将所有对 p.logger.Warn 的调用替换为 logger.Warn