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

如何用Pino Logger仅展示REST API请求中的单个请求头

解决Pino保留指定请求头的简洁方案

不用重写整个请求序列化器,有两种更高效的实现方式:

方法一:利用Redact的排除规则

Pino的redact配置支持通过!前缀标记需要保留的字段,能在全局脱敏请求头的同时,单独放行指定的transaction头:

const logger = pino({
  redact: [
    "req.headers", // 脱敏所有请求头
    "!req.headers.transaction", // 排除transaction头,不做脱敏
    "res.headers" // 脱敏响应头
  ]
})

这种方式直接复用Pino默认的请求序列化逻辑,完全不用自定义req序列化器,是最简洁的实现方式。

方法二:自定义Redact函数(适配复杂场景)

如果需要对保留字段做额外处理(比如格式校验、内容转换),可以用自定义redact函数:

const logger = pino({
  redact: {
    paths: ["req.headers", "res.headers"],
    remove: false, // 保留headers对象结构,仅脱敏指定外的字段
    redact: (path, value) => {
      if (path === "req.headers") {
        // 仅保留transaction字段,其他请求头替换为脱敏标记
        return Object.fromEntries(
          Object.entries(value).map(([key, val]) => 
            key === "transaction" ? [key, val] : [key, "***"]
          )
        )
      }
      // 其他路径按默认规则脱敏
      return "***"
    }
  }
})

关键说明

两种方式都能自动保留Pino默认输出的req.id、method、url、remoteAddress、remotePort等字段,无需手动重新定义。

内容的提问来源于stack exchange,提问作者Julio Martínez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:35:56