日志与可观测性看什么
日志评审的判断标准只有一条:深夜被叫起来时,能不能靠现有信息定位问题。落到检查项上就是关键路径是否留下可追踪的记录(含请求标识与关键参数)、级别是否恰当、是否避免写入敏感信息,以及新功能是否需要同步补充监控指标与告警。
基本信息
| 关键路径 | 成功与失败都要有可定位的日志,含请求标识 |
|---|---|
| 级别使用 | 可恢复问题用警告级别,避免全部堆在信息级别 |
| 敏感信息 | 日志与错误信息中不带密码、令牌与完整个人信息 |
| 指标联动 | 新功能是否需要新增监控指标与告警规则 |
逐项看什么
- 失败路径是否有日志,且能看出失败原因与关键参数。
- 日志级别是否恰当:正常流程用信息级,异常可恢复用警告级,致命错误用错误级。
- 是否打印了完整请求体或响应体:个人信息与凭据容易在这里泄漏。
- 重试与降级是否有记录:静默重试会让问题难以复盘。
- 是否需要新增指标:调用量、失败率、耗时分位是否被观测。
- 日志是否可关联:同一请求在多服务间能否靠标识串起来。
常见日志问题
| 问题 | 后果 |
|---|---|
| 关键路径无日志 | 线上问题只能靠复现,排障时间成倍增加 |
| 全部使用信息级别 | 真实告警被淹没在噪声里 |
| 打印完整对象 | 个人信息与凭据流入日志系统 |
| 日志缺少标识 | 一次请求跨多个服务时无法串联 |
| 重试不记录 | 放大故障的行为完全不可见 |
日志写法对照
日志写法对照
# 差:无法定位
log.info("处理完成");
# 好:带标识与关键参数
log.info("订单处理完成 orderId={} userId={} cost={}ms", orderId, userId, cost);
# 失败路径:包含原因,且不输出敏感字段
log.warn("订单处理失败 orderId={} reason={}", orderId, reason);
# 注意:不要打印完整请求体、令牌与身份证件类字段用「深夜被叫醒能否定位」检验日志质量:缺日志的代码上线即等于盲飞。
新功能上线通常需要配套指标与告警:没有观测手段的改动,出问题时只能等用户反馈。