SuperAPI AI 工具集

structured-logging

部署与运维

查看项目

更新于 10-16 00:03

技能介绍

用途:为生产系统提供结构化日志(Structured Logging)实践规范,目标是提升可观测性与事故排查效率,让日志可被查询而非仅供人阅读。核心理念是设计日志时就考虑调试需求,分布式系统中缺少关联 ID 的日志几乎没有价值。

主要能力:

  1. 结构化格式:始终使用 JSON 键值对,禁止字符串插值。示例字段含 event、user_id、reason、amount、timestamp、level、service、request_id。
  2. 必填字段:每天日志必须包含 timestamp(ISO 8601 带时区)、level(debug/info/warn/error)、event(snake_case、过去式)、request_id 或 trace_id、service、environment。
  3. 高基数维度:身份类(user_id、org_id、account_id)、追踪类(request_id、trace_id、span_id)、领域类(order_id、transaction_id、job_id),用于把问题定位到具体实体。
  4. 日志级别:debug 用于本地细节且生产禁用;info 记录用户操作、任务完成、部署;warn 记录已处理但意外的情况,如重试、降级;error 记录异常、失败请求、超时。反模式是不要把预期情况记为 error(如密码错误应为 info)。
  5. 上下文传播:下游服务需继承上游关联 ID,跨 HTTP 头、消息队列、异步任务传递,通过中间件或拦截器自动注入;异步任务需保存并恢复原始请求上下文。
  6. 该记与不该记:记录请求入口出口与耗时、状态流转、外部调用延迟与状态、认证授权事件、任务起止与失败、重试与熔断变化;跳过敏感数据(密码、令牌、PII、卡号)、紧循环内部、无调试价值的成功案例、重复的基础设施日志。
  7. 命名约定:字段名用 snake_case(user_id),事件用过去式动词(payment_completed),可按领域加前缀(auth.login_failed、billing.invoice_created)。
  8. 性能:高流量 debug 采样、热路径避免或异步写入、缓冲批量写、运行时可配置日志级别。
  9. 语言实现参考:Python 用 structlog;Ruby/Rails 用 Rails.event(8.1+)或 semantic_logger;Node.js 用 pino 或带 JSON formatter 的 winston;Go 用标准库 slog 或 zerolog;Java 用带 JSON encoder 的 logback。
  10. 日志决策表与事故调试清单:借助 who/what/when/why/where 五个问题验证设计,事后补充希望当时拥有的日志。

使用方式与限制:本资料为实践指南,未提供完整安装命令。具体安装与配置命令、各库版本细节及性能基准数值暂未提供,需参考对应日志库官方文档。是否记录需按场景权衡,敏感数据不得记录。