标准答案
- 日志使用结构化字段便于按服务、版本、租户和请求 ID 查询。
- 密码、token、Cookie、个人信息和完整请求体默认不记录,必要时只记录摘要或部分掩码。
- 异常堆栈保留在受控日志系统,外部响应返回稳定错误码。
- 日志级别、采样、保留和导出权限要纳入安全与成本治理。
题目解析
结构化日志的价值在于把请求 ID、租户、版本、路由、耗时和错误类型作为字段记录,而不是把一整段字符串拼起来。字段应采用白名单,密码、token、Cookie、Authorization、完整请求体和个人信息默认禁止进入日志;需要排查时也应只保留经过批准的摘要或掩码。
日志会进入采集代理、集中平台、备份和导出链路,调试级别并不等于只在本机存在。生产开启临时 debug 前要限制时间、采样和访问权限,并检查异常对象的 repr 是否包含请求数据。对外响应只返回稳定错误码和 request ID,堆栈留在受控日志系统。
日志内容还要考虑查询安全和成本。用户输入作为字段值记录,避免拼接成不可解析或可能触发日志注入的行;高频成功请求用采样,安全事件和状态变化保留完整审计。
常见误区
- 误区:为了方便排查打印整个 request.headers 或环境变量。改正:只记录允许字段,对 token、Cookie 和身份信息做删除或掩码。
- 误区:把 traceback 直接返回给客户端。改正:响应返回通用错误和 request ID,完整堆栈只进入受控日志。
- 误区:将用户输入直接拼接到日志文本。改正:使用结构化 logger 字段,并对换行、长度和敏感内容做约束。