4. 错误码分类与设计原则:错误码结构、编码规则、层级关系、命名规范

适用场景

该章节适用于以下场景:

  • 新系统或新功能模块设计初始错误码体系
  • 已有系统需要规范化错误码,提升可观测性与排查效率
  • 多团队、多服务协作时统一错误码策略,避免冲突与歧义
  • Crash监控系统集成异常分类与根因分析时建立错误码映射规则

前置条件

  • 已梳理业务模块划分(至少一级模块清单)
  • 已定义错误严重等级(Fatal / Error / Warning / Info)
  • 团队认可统一的错误码生命周期管理流程
  • 已有或准备建立错误码登记系统(如数据库表或YAML存储库)

操作步骤

  1. 定义错误码整体结构:确定总位数(推荐8位十进制或16位十六进制),明确各分段含义。
  2. 设计编码规则:按“模块-系统-错误类型-序号”分层,每段固定长度(如2位),支持扩容预留。
  3. 建立层级关系:绘制树状层级图,保证父级编码能聚合子级错误。
  4. 制定命名规范:英文命名采用UpperCamelCase + _ERROR_ + 描述,中文描述不超过20字。
  5. 编写设计文档:输出《错误码设计规范.md》及示例映射表。
  6. 评审与注册:涉及多团队的错误码需提交评审,通过后登记错误码仓库。
提示:推荐使用8位十进制ABCDEFGH格式,每位0-9。例如:12010201 → 模块:12(媒体播放)、系统:01(Android)、错误类型:02(解码)、序号:01(参数无效)。

输入输出物

类型条目格式/示例
输入模块划分清单JSON / YAML
输入现有错误码登记(如有)CSV / 数据库导出
输出错误码设计文档Markdown / Confluence页面
输出错误码映射表CSV / TOML / 自动化映射规则
输出示例代码段(生成器)Python脚本

责任边界

  • 架构师 / 技术负责人:审批错误码结构、编码规则和层级划分。
  • 模块开发团队:按规范生成模块内错误码并完成注册。
  • SRE / 监控运维:维护错误码映射表与Crash监控告警规则。
  • QA团队:验证错误码符合规范,检查日志输出是否携带正确错误码。
  • 文档管理员:归档变更记录,更新错误码在线查询页。

记录材料

材料名称内容要求保存位置
错误码设计规范结构、编码规则、层级关系、命名规范全文公司内Wiki / 代码仓库docs/
错误码注册表每笔错误码的编码、模块、系统、类型、序号、中文描述、英文常量名、注册日期、负责人数据库 / YAML仓库
变更日志每次新增、废弃、修改错误码的时间、原因、审批人CHANGELOG.md

异常处理

常见异常及处理方案
  • 错误码冲突:两位模块编码用完时(如0-99),启用扩展位或重新规划模块粒度;运行时冲突通过监控告警触发人工合并。
  • 命名不规范:使用自动化Lint工具检查常量命名,CI门禁拒绝非规范提交。
  • 层级混乱:定期(每季度)review错误码层级树,使用脚本生成报告标记孤儿节点。
  • 缺失文档:将错误码登记纳入开发流程Checklist,上线前必须完成注册。

验收标准

编号验收项判定方法
AC-04-01所有错误码均符合8位十进制结构扫描所有常量定义,正则匹配^\d{8}$
AC-04-02每个错误码对应唯一英文常量名,无重复执行脚本检查命名空间唯一性
AC-04-03错误码层级关系文档与实际代码一致自动生成层级树并与设计文档对比
AC-04-04错误码映射表覆盖所有生产环境Crash类型映射表与Crash监控标签做全量diff
AC-04-05异常处理预案已集成到CI/CD门禁模拟冲突提交,验证是否被阻断

错误码结构示意图

错误码8位分层结构 8位十进制错误码结构(AB CD EF GH) 错误码 AB 模块 00-99 CD 系统 00-99 EF 错误类型 00-99 GH 序号 00-99 示例:错误码 12010201 AB=12(媒体播放器模块) CD=01(Android平台) EF=02(解码错误) GH=01(参数无效) 层级关系:错误码 → 模块 → 系统 → 类型 → 序号
关键设计决策:每组两位(00-99)共支持 100×100×100×100 = 1亿个错误码,实际按模块分配后远大于一般需求。若某模块错误码超过100个,可为其单独分配多个AB编码。