【发布时间】:2018-04-27 14:07:18
【问题描述】:
我正在开发一个包含多个模块/服务的快速项目。文件夹结构大致如下所示:
-- app.js
-- payment_service
-- routes.js
-- index.js
-- models
-- model_1.js
-- model_2.js
index.js 中的 API 是唯一公开的 API,它们充当此模块/服务的所有请求的网关。
大多数服务在许多情况下都可能引发操作错误,因此可能需要人工干预来解决问题。所以我需要:
- 使用适当的上下文正确记录错误,以便某些人/脚本可以执行必要的操作。
- 找出失败的原因。
将有专门的团队负责每项服务。因此,我应该能够区分每个服务的错误日志,以便将其汇总并转发给相关人员。
我决定使用 ELK stash,以便我可以通过脚本生成报告。
我面临的主要问题是我无法保持日志之间的相关性。例如;如果一个请求来了,它通过了五个函数并且每个函数都记录了一些东西,那么我就无法关联这些日志。
一种方法是为每个请求创建一个子记录器并将其传递给所有函数,但这似乎是将记录器实例传递给所有函数的额外开销。
另一种选择是使用verror 之类的东西并仅在服务/模块的入口点进行日志记录,以便整个上下文可以包含在日志中。这种方法在记录错误方面看起来不错,但它对信息和调试日志没有帮助 - 它们在开发和测试阶段帮助了我很多。
为了区分错误日志,我将创建
- 每个服务的日志级别错误的专用记录器。
- 一个应用范围的通用记录器,用于信息和调试目的。
这是正确的方法吗?
以最简单的方式实现所有要求的最佳方法是什么?
【问题讨论】: