标准答案
- 前端日志应采用字段白名单,只采集定位问题必需的信息,例如 release、路由、错误类型、接口名、状态码和 trace id。
- 禁止采集密码、token、cookie、身份证、手机号、银行卡、精确地址、完整输入框内容和完整请求响应体。
- 对 URL、query、header、body、错误 message 和 breadcrumb 做脱敏,避免敏感信息混入通用字段。
- 按错误类型、用户比例、环境和严重程度做采样,避免日志量过大和性能开销过高。
- 日志要有保留周期、访问权限和审计边界,不能让所有人随意查看用户级明细。
题目解析
前端日志最容易失控的地方是“顺手把上下文都传上去”。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 也可能泄露信息。
- 没有采样和访问控制,日志平台既影响性能又扩大敏感数据访问面。