其他
需要为应用/服务设计可调试、可监控、可审计的日志体系时使用
为应用或服务落地结构化日志、标准字段、日志级别、上下文传播、安全脱敏与日志聚合的完整实践。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要为应用/服务设计可调试、可监控、可审通用
解决思路
- 所有日志输出使用结构化格式(JSON)
- 所有日志条目包含一致的字段
- 让日志既可被机器解析,又保持对人可读
- 使用原生支持结构化输出的日志库
- 避免用字符串拼接构造日志消息,改用结构化字段
- 每条日志都包含 timestamp:ISO 8601 格式并带时区
- level:日志严重级别(DEBUG、INFO、WARN、ERROR、FATAL)
- message:事件的人类可读描述
- service:服务或应用名称
- version:应用版本或构建标识
- trace_id:分布式追踪关联 ID
- span_id:当前 span 标识
- request_id:请求的唯一标识
- DEBUG:开发用的详细诊断信息
- INFO:正常运营事件与状态变化
- WARN:被优雅处理的意外情况
- ERROR:影响当前操作但未影响服务的失败
- FATAL:需要立即关注的严重故障
- 在请求生命周期内的所有日志条目中带上请求上下文
- 跨服务边界传播 trace ID
- 对用户发起的操作添加(匿名化的)用户上下文
- 对领域事件添加相关业务上下文
- 使用 MDC(Mapped Diagnostic Context)或等价机制管理上下文
- 绝不记录敏感信息(密码、令牌、PII)
- 必须引用敏感数据时进行掩码或脱敏
- 按数据敏感度实施日志访问控制
- 考虑数据保留策略与合规要求
- 对敏感系统的日志访问进行审计
- 使用异步日志,避免阻塞应用线程
- 对生产环境高频 DEBUG 日志实施日志采样
- 合理设置日志缓冲,平衡延迟与吞吐
- 监控日志基础设施的瓶颈
- 按环境设置合适的日志级别
- 把所有服务的日志集中到统一平台
- 所有服务使用一致的格式
- 实施日志轮转与保留策略
- 启用全文搜索与过滤能力
- 针对关键模式设置基于日志的告警
- 记录错误时包含完整上下文:message、code、堆栈跟踪
- 记录被包装/嵌套异常的完整错误链
- 包含相关的请求与状态信息
- 避免跨层重复记录同一错误
- 记录错误恢复动作及其结果
- 在服务边界(入口与出口)记录日志
- 包含耗时信息以便性能分析
- 记录配置变更与部署
- 编写可据以行动的日志消息,帮助调试
- 定期审查与清理日志以降低噪音
- 编写清晰、描述性的消息
- 包含相关标识符(用户 ID、订单 ID 等)
- 避免「Error occurred」之类的笼统消息
- 在整个应用中使用一致的术语
- 包含足够上下文,无需额外查询即可理解事件
- Development:DEBUG 级别、控制台输出、详细格式
- Staging:INFO 级别、结构化 JSON、完整上下文
- Production:INFO/WARN 级别、结构化 JSON、对 DEBUG 采样
适用边界 · 注意事项
- 极低延迟或资源极度受限的环境(如嵌入式、高频交易热路径),异步结构化日志与集中式聚合可能带来不可接受的额外开销
- 一次性的本地脚本或临时 CLI 调试,不需要 trace_id/span_id 字段与集中日志平台
- 受合规或数据主权限制、日志不得外传到第三方平台的场景,不能直接套用集中式日志聚合方案