You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:05:22