标准答案

  1. 前端日志应采用字段白名单,只采集定位问题必需的信息,例如 release、路由、错误类型、接口名、状态码和 trace id。
  2. 禁止采集密码、token、cookie、身份证、手机号、银行卡、精确地址、完整输入框内容和完整请求响应体。
  3. 对 URL、query、header、body、错误 message 和 breadcrumb 做脱敏,避免敏感信息混入通用字段。
  4. 按错误类型、用户比例、环境和严重程度做采样,避免日志量过大和性能开销过高。
  5. 日志要有保留周期、访问权限和审计边界,不能让所有人随意查看用户级明细。

题目解析

前端日志最容易失控的地方是“顺手把上下文都传上去”。URL query、请求 header、接口 body、错误 message、breadcrumb 都可能夹带用户隐私或业务敏感信息。

设计时应先做白名单,而不是黑名单。比如接口日志只传接口标识、状态码、耗时、trace id 和错误码,不传完整请求体;用户信息只传匿名 id 或分桶信息,不传真实联系方式。

隐私和排障不是二选一。合理的日志应该能回答“哪个版本、哪个页面、哪个接口、什么错误、影响多少人”,而不是把用户输入和业务数据原样搬到日志平台。

代码示例

日志上报前先做字段白名单和脱敏。

JavaScript
function sanitizeLog(event) {
  return {
    type: event.type,
    release: event.release,
    route: event.route,
    api: event.apiName,
    status: event.status,
    traceId: event.traceId,
    message: maskSensitiveText(event.message)
  }
}

常见误区

  • 直接上传完整请求参数、响应体或表单输入。
  • 只在业务代码里脱敏,忘记错误 message、URL query 和 breadcrumb 也可能泄露信息。
  • 没有采样和访问控制,日志平台既影响性能又扩大敏感数据访问面。

作者信息