Files
pig-farm-controller/design/provide-logger-with-mothed/index.md
2025-11-03 20:39:31 +08:00

1.3 KiB

需求

为日志系统提供一种机制,能够记录和追踪跨越不同对象和方法的调用链,以增强日志的可读性和可观测性。

issue

#56

描述

初始问题

在复杂的业务流程中,一个请求可能会流经多个服务或控制器。为了追踪一个完整的操作流程,开发者不得不在每个方法的日志中手动添加上下文信息(如 actionType),这非常繁琐且容易出错。

期望的演进

  1. 初步设想: 提供一个 logger.With() 方法,调用后返回一个携带预设信息的日志记录器副本,后续日志自动附带此信息。
  2. 解决上下文覆盖: 简单的 With("action", "some_action") 会导致同名字段被覆盖。因此,期望能将调用链信息存储在数组中,并在打印时拼接,如 action: "action1·action2"
  3. 最终目标 (可观测性): 进一步区分“对象”和“方法”,构建出更具表现力的调用链。例如,当 userControllerCreate 方法调用 userServiceCreate 方法时,日志应能清晰地展示 trace: "userController.Create->userService.Create" 这样的调用关系。

实现方案

实现方案