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

如何在Fastify的Pino日志中脱敏查询字符串参数

解决方案

以下是两种可直接落地的实现方式,均可实现仅脱敏URL中指定查询参数、保留其余内容正常输出的需求:

方式1:使用Pino内置自定义脱敏函数(推荐)

Fastify初始化时直接配置logger的redact选项,对url字段做正则替换即可,不会侵入业务逻辑、也不会修改原始请求参数:

const fastify = require('fastify')({
  logger: {
    level: 'info',
    redact: {
      paths: ['url'],
      // 自定义脱敏逻辑
      redactFunction: (value) => {
        if (typeof value !== 'string') return value
        // 正则匹配指定参数,仅替换取值部分
        return value.replace(/([?&]token=)[^&]+/g, '$1***')
      }
    }
  }
})

扩展说明:如果需要同时脱敏password、secret等多个敏感参数,只需修改正则为/([?&](token|password|secret)=)[^&]+/g即可

方式2:通过Fastify请求钩子统一处理

如果需要对全链路的请求URL做脱敏(比如其他业务中间件也会打印URL日志),可以在请求前置钩子中处理:

fastify.addHook('onRequest', (req, reply, done) => {
  if (req.url.includes('?')) {
    // 注意:如果业务后续需要用到原始完整URL,不要直接修改req.raw.url
    // 可将脱敏后的URL存入自定义字段如req.sanitizedUrl,再配置Pino输出该字段即可
    req.raw.url = req.raw.url.replace(/([?&]token=)[^&]+/g, '$1***')
  }
  done()
})

内容的提问来源于stack exchange,提问作者Ben Davis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:24:03