【问题标题】:HTTP Pino logger and Elastic Common Schema (ecs) format in NestJSNestJS 中的 HTTP Pino 记录器和 Elastic Common Schema (ecs) 格式
【发布时间】:2021-12-10 22:48:33
【问题描述】:
我正在尝试将@elastic/ecs-pino-format 应用于nestjs-pino。下好的nestjs-pino 使用的是http-pino。我注意到http-pino 在[Symbol(pino.chindings)] 中添加了请求对象,我假设它使用的是子记录器。所以我尝试编写一个自定义格式化程序来通过调用obj.res.log.bindings() 来提取req 并将http.request 设置为符合 Elastic Common Schema (ecs)。我现在面临的问题是我的日志包含重复的 req 和 http.request 并且找不到删除它的方法。不确定我是否在寻找错误的方向,但我发现很多问题试图让 nestjs-pino 打印 Elastic Common Schema (ecs) 格式日志。我还注意到@elastic/ecs-pino-format 无法处理 fastify 的问题。有没有人遇到过类似的问题?
【问题讨论】:
标签:
node.js
nestjs
elk
pinojs
elastic-common-schema
【解决方案1】:
所以我对pino 和pino-http 以及它们如何集成到nesjs-pino 感到困惑。从外观上看,@elastic/ecs-pino-format 并没有处理pino-http 中 Elastic Common Schema (ecs) 的所有细节。所以我最终做的是将nestjs-pino 作为配置传入@elastic/ecs-pino-format 的格式对象的合并并配置pino-http。
pino-http支持传递
customAttributeKeys: {
req: 'http.request',
res: 'http.response',
}
用于更改req 和res 的键。至于req 和res 包含的数据,http-pino 有另一种转换方式
serializers: {
req: (log) => {... return transform },
res: (log) => {... return transform },
}
有关pino HTTP options的更多信息。
希望这可以帮助任何面临同样问题或希望使用 Elastic Common Schema (ecs) 日志的 Nestjs。