pino-logger中nestedKey与mixin配合时,如何让mixin返回值留根层级?
解决方案
要让mixin返回的dd对象保留在日志根层级,同时将请求自定义属性(如executionId)嵌套到metadata中,只需调整Pino配置,移除nestedKey选项并修改reqCustomProps的返回结构:
LoggerModule.forRootAsync({ imports: [ConfigModule], useFactory: (configService: ConfigService<AppConfig, true>) => ({ pinoHttp: { level: configService.get('logger.level', { infer: true }), autoLogging: false, name: 'someName', messageKey: 'message', // 利用Datadog默认的字段 mixin(): Record<string, unknown> { return { dd: { ...getDatadogMixin(tracer) }, }; }, // 移除nestedKey配置,避免所有自定义属性被嵌套 reqCustomProps(req) { return { // 手动将executionId放入metadata字段 metadata: { executionId: req.headers[EXECUTION_ID], }, }; }, }, }), inject: [ConfigService], }),
原理说明
- 移除
nestedKey后,Pino不会自动将所有自定义属性嵌套到指定字段,而是直接合并到日志根层级。 - 通过修改
reqCustomProps的返回结构,主动将executionId放入metadata对象中,实现请求属性的嵌套需求。 mixin返回的dd对象会直接被合并到日志根层级,完全匹配你期望的日志格式。
内容的提问来源于stack exchange,提问作者yairabr
相关产品推荐
相关产品推荐

