首页 > 其他分享 >异常日志-错误码

异常日志-错误码

时间:2022-09-27 12:00:05浏览次数:54  
标签:错误 错误码 第三方 出错 编号 日志 异常 强制

异常日志-错误码

错误码的制定

错误码的制定原则

【强制】错误码的制定原则:快速溯源、沟通标准化。

说明: 错误码想得过于完美和复杂,就像康熙字典中的生僻字一样,用词似乎精准,但是字典不容易随身携带并且简单易懂。

正例:错误码回答的问题是谁的错?错在哪?

1)错误码必须能够快速知晓错误来源,可快速判断是谁的问题。

2)错误码必须能够进行清晰地比对(代码中容易 equals)。

3)错误码有利于团队快速对错误原因达到一致认知。

错误码分成两个部分

【强制】错误码为字符串类型,共 5 位。

分成两个部分:错误产生来源+四位数字编号。

说明:错误产生来源分为 A/B/C。

A 表示错误来源于用户,比如参数错误,用户安装版本过低,用户支付超时等问题;

B 表示错误来源于当前系统,往往是业务逻辑出错,或程序健壮性差等问题;

C 表示错误来源于第三方服务,比如 CDN 服务出错,消息投递超时等问题;

四位数字编号从 0001 到 9999,大类之间的步长间距预留 100,参考文末附表 3。

错误码分级

【参考】错误码分为一级宏观错误码、二级宏观错误码、三级宏观错误码。

说明:在无法更加具体确定的错误场景中,可以直接使用一级宏观错误码,分别是:A0001(用户端错误)、B0001(系统执行出错)、C0001(调用第三方服务出错)。

正例:调用第三方服务出错是一级,中间件错误是二级,消息服务出错是三级。

错误码的制定说明

错误码不体现版本号和代码异常或错误等级信息

【强制】错误码不体现版本号和代码异常或错误等级信息。

说明:错误码以不断追加的方式进行兼容。错误等级由日志和错误码本身的释义来决定。

全部正常

【强制】全部正常,但不得不填充错误码时返回五个零:00000。

编号即被永久固定

【强制】编号不与公司业务架构,更不与组织架构挂钩,以先到先得的原则在统一平台上进行,审批生效,编号即被永久固定。

错误码使用者避免随意定义

【强制】错误码使用者避免随意定义新的错误码。

说明:尽可能在原有错误码附表中找到语义相同或者相近的错误码在代码中使用即可。

错误码的使用

错误码不能直接输出给用户

【强制】错误码不能直接输出给用户作为提示信息使用。

说明:堆栈(stack_trace)、错误信息(error_message)、错误码(error_code)、提示信息(user_tip)是一个有效关联并互相转义的和谐整体,但是请勿互相越俎代庖。

error_message 来承载业务独特信息

【推荐】错误码之外的业务独特信息由 error_message 来承载,而不是让错误码本身涵盖过多具体业务属性。

在错误信息上带上原有的第三方错误码

【推荐】在获取第三方服务错误码时,向上抛出允许本系统转义,由 C 转为 B,并且在错误信息上带上原有的第三方错误码。

错误码的后三位编号与 HTTP 状态码无关

【参考】错误码的后三位编号与 HTTP 状态码没有任何关系。

错误码的好处

错误码有利于交流协作

【参考】错误码有利于不同文化背景的开发者进行交流与代码协作。

说明:英文单词形式的错误码不利于非英语母语国家(如阿拉伯语、希伯来语、俄罗斯语等)之间的开发者互相协作。

错误码即人性,感性认知+口口相传

【参考】错误码即人性,感性认知+口口相传,使用纯数字来进行错误码编排不利于感性记忆和分类。

说明:数字是一个整体,每位数字的地位和含义是相同的。

反例:一个五位数字 12345,第 1 位是错误等级,第 2 位是错误来源,345 是编号,人的大脑不会主动地拆开并分辨每位数字的不同含义。

标签:错误,错误码,第三方,出错,编号,日志,异常,强制
From: https://www.cnblogs.com/gcbeen/p/16734083.html

相关文章

  • 日志文件
    <?xmlversion="1.0"encoding="UTF-8"?><configurationscan="true"><contextName>auth</contextName><propertyname="LOG_APP_NAME"value="${LOG_APP_NAME......
  • 分析服务器日志常用命令
    1、查看有多少个IP访问:awk '{print $1}' log_file|sort|uniq|wc-l2、查看某一个页面被访问的次数:grep "/index.php" log_file|wc-l3、查看每一个IP访问了多少......
  • 日志二
    一、gdb编译方式与编译单个文件类似,只需将多个文件同时包含进去,以g++执行命令为例:g++-ocodefilemain.cppstudent.cpp运行命令:./codefile当然这种方式不便于程......
  • 六 Java异常
    异常什么是异常实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对......
  • 【Azure 应用服务】App Service频繁出现 Microsoft.WindowsAzure.Diagnostics.Diagnos
    问题描述在使用AppService的过程中,发现应用频繁出现503错误,通过Kudu站点获取到Logfiles。在Eventlog.xml文件中,发现大量的Microsoft.WindowsAzure.Diagnostics.Diag......
  • 51单片机学习日志一:流水灯和定时器
    单片机最小系统的三要素就是电源、晶振、复位电路单片机复位一般是3种情况:上电复位、手动复位、程序自动复位。没有电压差就不会产生电流一、sbit在单片机中的使用C5......
  • 踩坑小计-Bitmap 使用中遇到的异常: trying to draw too large bitmap.
    异常log:FatalException:java.lang.RuntimeExceptionCanvas:tryingtodrawtoolarge(111590328bytes)bitmap.这里有个疑惑这个size到底是怎么限制的呢,先了解bitma......
  • 使用appsettings.json配置和依赖注入调用Serilog日志模块
    appsettings.json配置Serilog{//"Logging":{//"LogLevel":{//"Default":"Information",//"Microsoft.AspNetCore":"Warning"//}//},......
  • Oracle存储过程中,调用另外一个存储过程打印日志
    最近在项目中维护一个三方写的老破旧项目,居然在项目中大量用存储过程书写逻辑,在维护过程中不停的要去查看阅读对方写的存储过程是一个什么逻辑,使用DataGrip的断点功能尝试......
  • ARMS实践|日志在可观测场景下的应用
    简介: 在实际生产中,通过灵活组合文内几种使用方式,运维团队可以很好地排除日常观测、故障定位过程中的干扰因素,更快的定界甚至定位问题根因。作者:陈陈 日志在......