如何自己开网址/seo自学教程推荐
文章目录
- 异常日志的意义
- (一) 错误码
- (二) 异常处理
- (三) 日志规约
- 附:错误码列表
🙊前言:本文章为瑞_系列专栏之《Java开发手册》的异常日志篇,本篇章主要介绍异常日志的错误码、异常处理、日志规约。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本系列专栏主要以这本书进行讲解和拓展,有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!
本系列第一篇链接:(一)编程规约
异常日志的意义
在Java开发中,异常日志是非常重要的。它记录了程序运行过程中的异常信息,可以帮助开发人员快速定位和解决代码中的问题,提高程序的性能和稳定性。当然了,异常日志也不是万能的。它只能告诉你程序出了什么问题,但没法告诉你为什么会出现这个问题,但有分析方向总比没有强呐。不要把异常日志当成是洪水猛兽,相反,应该把它当成是你的得力助手。当你遇到问题时,让它帮你找出问题的所在;当写完代码时,让它检查可能存在的问题。
异常日志就是我们程序员的“救命稻草”,想象一下,你正在编写一个复杂的程序,突然出现了一个莫名其妙的错误。这时,优秀的异常日志就像是一根救命稻草,可以帮助我们找到问题的根源。没有异常日志,你可能要因为这个bug困扰几个小时甚至❌通宵❌。所以想要保住发际线,就需要我们遵守开发手册中的异常日志规约,养成良好的异常日志编写习惯。
(一) 错误码
- 【强制】错误码的制定原则:快速溯源、简单易记、沟通标准化。
说明: 错误码想得过于完美和复杂,就像康熙字典中的生僻字一样,用词似乎精准,但是字典不容易随身携带并且简单易懂。
正例:错误码回答的问题是谁的错?错在哪?
1)错误码必须能够快速知晓错误来源,可快速判断是谁的问题。
2)错误码易于记忆和比对(代码中容易 equals)。
3)错误码能够脱离文档和系统平台达到线下轻量化地自由沟通的目的。
瑞:注意错误码的后三位编号与 HTTP 状态码没有任何关系
- 【强制】错误码不体现版本号和错误等级信息。
说明:错误码以不断追加的方式进行兼容。错误等级由日志和错误码本身的释义来决定。
瑞:文末有附错误码列表,可供参考
- 【强制】全部正常,但不得不填充错误码时返回五个零:00000。
瑞:这种约定属大家公认的约定,不要将其用作其它含义,防止误导他人
- 【强制】错误码为字符串类型,共 5 位,分成两个部分:错误产生来源+四位数字编号。
说明:错误产生来源分为 A/B/C,A 表示错误来源于用户,比如参数错误,用户安装版本过低,用户支付超时等问题;B 表示错误来源于当前系统,往往是业务逻辑出错,或程序健壮性差等问题;C 表示错误来源于第三方服务,比如 CDN 服务出错,消息投递超时等问题;四位数字编号从 0001 到 9999,大类之间的步长间距预留 100,参考文末附表。
瑞:文末附表为阿里的《Java开发手册》泰山版《附表3:错误码列表》,仅供参考
-
【强制】编号不与公司业务架构,更不与组织架构挂钩,一切与平台先到先申请的原则进行,审批生效,编号即被永久固定。
-
【强制】错误码使用者避免随意定义新的错误码。
说明:尽可能在原有错误码附表中找到语义相同或者相近的错误码在代码中使用即可。
瑞:CV(复制粘贴)大法好
- 【强制】错误码不能直接输出给用户作为提示信息使用。
说明:堆栈(stack_trace)、错误信息(error_message)、错误码(error_code)、提示信息(user_tip)是一个有效关联并互相转义的和谐整体,但是请勿互相越俎代庖。
瑞:尤其是错误信息,经常遇到层层嵌套的情况,建议开发人员不要只测试正例,也要多进行异常值测试
-
【推荐】错误码之外的业务独特信息由 error_message 来承载,而不是让错误码本身涵盖过多具体业务属性。
-
【推荐】在获取第三方服务错误码时,向上抛出允许本系统转义,由 C 转为 B,并且在错误信息上带上原有的第三方错误码。
-
【参考】错误码分为一级宏观错误码、二级宏观错误码、三级宏观错误码。
说明:在无法更加具体确定的错误场景中,可以直接使用一级宏观错误码,分别是:A0001(用户端错误)、B0001(系统执行出错)、C0001(调用第三方服务出错)。
正例:调用第三方服务出错是一级,中间件错误是二级,消息服务出错是三级。 -
【参考】错误码的后三位编号与 HTTP 状态码没有任何关系。
瑞:常见的 HTTP 状态码可查看Spring框架中的类
org.springframework.http.HttpStatus
,包含 OK(200)、BAD_REQUEST(400)、NOT_FOUND(404)等
-
【参考】错误码尽量有利于不同文化背景的开发者进行交流与代码协作。
说明:英文单词形式的错误码不利于非英语母语国家(如阿拉伯语、希伯来语、俄罗斯语等)之间的开发者互相协作。 -
【参考】错误码即人性,感性认知+口口相传,使用纯数字来进行错误码编排不利于感性记忆和分类。
说明:数字是一个整体,每位数字的地位和含义是相同的。
反例:一个五位数字 12345,第 1 位是错误等级,第 2 位是错误来源,345 是编号,人的大脑不会主动地分辨每位数字的不同含义
(二) 异常处理
-
【强制】Java 类库中定义的可以通过预检查方式规避的 RuntimeException 异常不应该通过catch 的方式来处理,比如:NullPointerException,IndexOutOfBoundsException 等等。
说明:无法通过预检查的异常除外,比如,在解析字符串形式的数字时,可能存在数字格式错误,不得不通过 catch NumberFormatException 来实现。
正例:if (obj != null) {…}
反例:try { obj.method(); } catch (NullPointerException e) {…} -
【强制】异常不要用来做流程控制,条件控制。
说明:异常设计的初衷是解决程序运行中的各种意外情况,且异常的处理效率比条件判断方式要低很多。
瑞:应该使用条件语句(如if-else语句)来实现流程控制和条件控制。条件语句的执行效率比异常处理机制要高得多,因为它们不需要创建新的异常对象、抛出异常、捕获异常等操作。此外,条件语句也更加直观和易于理解,可以更好地表达程序的逻辑关系
- 【强制】catch 时请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的 catch 尽可能进行区分异常类型,再做对应的异常处理。
说明:对大段代码进行 try-catch,使程序无法根据不同的异常做出正确的应激反应,也不利于定位问题,这是一种不负责任的表现。
正例:用户注册的场景中,如果用户输入非法字符,或用户名称已存在,或用户输入密码过于简单,在程序上作出分门别类的判断,并提示给用户。
瑞:总有大聪明为了省事,直接大段catch然后丢Exception💢但是要注意别因为遵守本条而违反上一条
- 【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。
瑞:最外层的业务使用者常见为Controller层,即在Controller层要对catch中的error_message进行转义
- 【强制】事务场景中,抛出异常被 catch 后,如果需要回滚,一定要注意手动回滚事务。
瑞:CRUD工程师最基本操作
- 【强制】finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch。
说明:如果 JDK7 及以上,可以使用 try-with-resources 方式。
瑞:在JDK7 及以上的版本中,推荐使用 try-with-resources 语句来自动关闭资源对象和流对象。这种方式可以简化代码并确保资源被正确关闭,即使在处理异常时也是如此。如下代码所示:
try (FileInputStream fis = new FileInputStream("input.txt")) {// 在这里使用 fis 进行文件读取操作// ...
} catch (IOException e) {// 处理异常// ...
}
- 【强制】不要在 finally 块中使用 return。
说明:try 块中的 return 语句执行成功后,并不马上返回,而是继续执行 finally 块中的语句,如果此处存在 return 语句,则在此直接返回,无情丢弃掉 try 块中的返回点。
反例:
private int x = 0;
public int checkReturn() {
try {
// x 等于 1,此处不返回
return ++x;
} finally {
// 返回的结果是 2
return ++x;
}
}
瑞:❗️ 务必记住本条,巨坑之一❗️
- 【强制】捕获异常与抛异常,必须是完全匹配,或者捕获异常是抛异常的父类。
说明:如果预期对方抛的是绣球,实际接到的是铅球,就会产生意外情况。
瑞:尽量是完全匹配,无脑抛
Exception
快乐是快乐,但如果出错,异常问题类型无法精准定位
-
【强制】在调用 RPC、二方包、或动态生成类的相关方法时,捕捉异常必须使用 Throwable类来进行拦截。
说明:通过反射机制来调用方法,如果找不到方法,抛出 NoSuchMethodException。什么情况会抛出NoSuchMethodError 呢?二方包在类冲突时,仲裁机制可能导致引入非预期的版本使类的方法签名不匹配,或者在字节码修改框架(比如:ASM)动态创建或修改类时,修改了相应的方法签名。这些情况,即使代码编译期是正确的,但在代码运行期时,会抛出 NoSuchMethodError。 -
【推荐】方法的返回值可以为 null,不强制返回空集合,或者空对象等,必须添加注释充分说明什么情况下会返回 null 值。
说明:本手册明确防止 NPE 是调用者的责任。即使被调用方法返回空集合或者空对象,对调用者来说,也并非高枕无忧,必须考虑到远程调用失败、序列化失败、运行时异常等场景返回 null 的情况。
瑞:NPE(java.lang.NullPointerException): 空指针异常。
- 【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景:
1) 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。
反例:public int f() { return Integer 对象}, 如果为 null,自动解箱抛 NPE。
2) 数据库的查询结果可能为 null。
3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
5) 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。
6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE。
正例:使用 JDK8 的 Optional 类来防止 NPE 问题。
瑞:真的防止NPE,猿猿有责。不过个人觉得 Optional 类设计有点繁琐,博主一般都是使用条件语句进行判断
-
【推荐】定义时区分 unchecked / checked 异常,避免直接抛出 new RuntimeException(),更不允许抛出 Exception 或者 Throwable,应使用有业务含义的自定义异常。推荐业界已定义过的自定义异常,如:DAOException / ServiceException 等。
-
【参考】对于公司外的 http/api 开放接口必须使用“错误码”;而应用内部推荐异常抛出;跨应用间 RPC 调用优先考虑使用 Result 方式,封装 isSuccess()方法、“错误码”、“错误简短信息”;而应用内部推荐异常抛出。
说明:关于 RPC 方法返回方式使用 Result 方式的理由:
1)使用抛异常返回方式,调用方如果没有捕获到就会产生运行时错误。
2)如果不加栈信息,只是 new 自定义异常,加入自己的理解的 error message,对于调用端解决问题
的帮助不会太多。如果加了栈信息,在频繁调用出错的情况下,数据序列化和传输的性能损耗也是问题。 -
【参考】避免出现重复的代码(Don’t Repeat Yourself),即 DRY 原则。
说明:随意复制和粘贴代码,必然会导致代码的重复,在以后需要修改时,需要修改所有的副本,容易遗漏。必要时抽取共性方法,或者抽象公共类,甚至是组件化。
正例:一个类中有多个 public 方法,都需要进行数行相同的参数校验操作,这个时候请抽取:private boolean checkParam(DTO dto) {…}
(三) 日志规约
- 【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架(SLF4J、JCL–Jakarta Commons Logging)中的 API,使用门面模式的日志框架,有利于维护和
各个类的日志处理方式统一。
说明:日志框架(SLF4J、JCL–Jakarta Commons Logging)的使用方式(推荐使用 SLF4J)
使用 SLF4J:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Test.class);
使用 JCL:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private static final Log log = LogFactory.getLog(Test.class);
瑞:吹爆SLF4J,以下为 logback.xml 配置示例
<?xml version="1.0" encoding="UTF-8"?>
<configurationxmlns="http://ch.qos.logback/xml/ns/logback"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback logback.xsd"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%date{HH:mm:ss.SSS} [%t] %logger - %m%n</pattern></encoder></appender><logger name="com.ray.yourpackage" level="debug" additivity="false"><appender-ref ref="STDOUT"/></logger><root level="ERROR"><appender-ref ref="STDOUT"/></root>
</configuration>
- 【强制】所有日志文件至少保存 15 天,因为有些异常具备以“周”为频次发生的特点。对于当天日志,以“应用名.log”来保存,保存在/home/admin/应用名/logs/目录下,过往日志格式为: {logname}.log.{保存日期},日期格式:yyyy-MM-dd
说明:以 mppserver 应用为例,日志保存在/home/admin/mppserver/logs/mppserver.log,历史日志名称为 mppserver.log.2016-08-01
瑞:其实15天都不够,空间条件允许的情况下,建议增加天数,毕竟不怕一万就怕万一
-
【强制】应用中的扩展日志(如打点、临时监控、访问日志等)命名方式:appName_logType_logName.log。logType:日志类型,如 stats/monitor/access 等;logName:日志描述。这种命名的好处:通过文件名就可知道日志文件属于什么应用,什么类型,什么目的,也有利于归类查找。
说明:推荐对日志进行分类,如将错误日志和业务日志分开存放,便于开发人员查看,也便于通过日志对系统进行及时监控。
正例:mppserver 应用中单独监控时区转换异常,如:mppserver_monitor_timeZoneConvert.log -
【强制】在日志输出时,字符串变量之间的拼接使用占位符的方式。
说明:因为 String 字符串的拼接会使用 StringBuilder 的 append()方式,有一定的性能损耗。使用占位符仅是替换动作,可以有效提升性能。
正例:logger.debug(“Processing trade with id: {} and symbol: {}”, id, symbol); -
【强制】对于 trace/debug/info 级别的日志输出,必须进行日志级别的开关判断。
说明:虽然在 debug(参数)的方法体内第一行代码 isDisabled(Level.DEBUG_INT)为真时(Slf4j 的常见实现Log4j 和 Logback),就直接 return,但是参数可能会进行字符串拼接运算。此外,如果 debug(getName())这种参数内有 getName()方法调用,无谓浪费方法调用的开销。
正例:
// 如果判断为真,那么可以输出 trace 和 debug 级别的日志if (logger.isDebugEnabled()) {logger.debug("Current ID is: {} and name is: {}", id, getName());}
- 【强制】避免重复打印日志,浪费磁盘空间,务必在 log4j.xml 中设置 additivity=false。
正例:<logger name=“com.taobao.dubbo.config” additivity=“false”>
瑞:可参考本小节第一条,土豪请随意
- 【强制】生产环境禁止直接使用 System.out 或 System.err 输出日志或使用 e.printStackTrace() 打印异常堆栈。
说明:标准日志输出与标准错误输出文件每次 Jboss 重启时才滚动,如果大量输出送往这两个文件,容易造成文件大小超过操作系统大小限制。
瑞:不仅仅是在生产环境,开发环境也建议少用这两条输出指令,很多时候出问题就是由于某个死循环中存在这两条语句
-
【强制】异常信息应该包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字 throws 往上抛出。
正例:logger.error(各类参数或者对象 toString() + “_” + e.getMessage(), e); -
【强制】日志打印时禁止直接用 JSON 工具将对象转换成 String。
说明:如果对象里某些 get 方法被重写,存在抛出异常的情况,则可能会因为打印日志而影响正常业务流程的执行。
正例:打印日志时仅打印出业务相关属性值或者调用其对象的 toString()方法。 -
【推荐】谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使用warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑爆,并记得及时删除这些观察日志。
说明:大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请思考:这些日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处? -
【推荐】可以使用 warn 日志级别来记录用户输入参数错误的情况,避免用户投诉时,无所适从。如非必要,请不要在此场景打出 error 级别,避免频繁报警。
说明:注意日志输出的级别,error 级别只记录系统逻辑出错、异常或者重要的错误信息。 -
【推荐】尽量用英文来描述日志错误信息,如果日志中的错误信息用英文描述不清楚的话使用中文描述即可,否则容易产生歧义。
说明:国际化团队或海外部署的服务器由于字符集问题,使用全英文来注释和描述日志错误信息。
附:错误码列表
以下为阿里的《Java开发手册》泰山版《附表3:错误码列表》
错误码 | 中文描述 | 说明 |
---|---|---|
00000 | 一切 ok | 正确执行后的返回 |
A0001 | 用户端错误 | 一级宏观错误码 |
A0100 | 用户注册错误 | 二级宏观错误码 |
A0101 | 用户未同意隐私协议 | |
A0102 | 注册国家或地区受限 | |
A0110 | 用户名校验失败 | |
A0111 | 用户名已存在 | |
A0112 | 用户名包含敏感词 | |
A0113 | 用户名包含特殊字符 | |
A0120 | 密码校验失败 | |
A0121 | 密码长度不够 | |
A0122 | 密码强度不够 | |
A0130 | 校验码输入错误 | |
A0131 | 短信校验码输入错误 | |
A0132 | 邮件校验码输入错误 | |
A0133 | 语音校验码输入错误 | |
A0140 | 用户证件异常 | |
A0141 | 用户证件类型未选择 | |
A0142 | 大陆身份证编号校验非法 | |
A0143 | 护照编号校验非法 | |
A0144 | 军官证编号校验非法 | |
A0150 | 用户基本信息校验失败 | |
A0151 | 手机格式校验失败 | |
A0152 | 地址格式校验失败 | |
A0153 | 邮箱格式校验失败 | |
A0200 | 用户登陆异常 | 二级宏观错误码 |
A0201 | 用户账户不存在 | |
A0202 | 用户账户被冻结 | |
A0203 | 用户账户已作废 | |
A0210 | 用户密码错误 | |
A0211 | 用户输入密码次数超限 | |
A0220 | 用户身份校验失败 | |
A0221 | 用户指纹识别失败 | |
A0222 | 用户面容识别失败 | |
A0223 | 用户未获得第三方登陆授权 | |
A0230 | 用户登陆已过期 | |
A0240 | 用户验证码错误 | |
A0241 | 用户验证码尝试次数超限 | |
A0300 | 访问权限异常 | 二级宏观错误码 |
A0301 | 访问未授权 | |
A0302 | 正在授权中 | |
A0303 | 用户授权申请被拒绝 | |
A0310 | 因访问对象隐私设置被拦截 | |
A0311 | 授权已过期 | |
A0312 | 无权限使用 API | |
A0320 | 用户访问被拦截 | |
A0321 | 黑名单用户 | |
A0322 | 账号被冻结 | |
A0323 | 非法 IP 地址 | |
A0324 | 网关访问受限 | |
A0325 | 地域黑名单 | |
A0330 | 服务已欠费 | |
A0340 | 用户签名异常 | |
A0341 | RSA 签名错误 | |
A0400 | 用户请求参数错误 | 二级宏观错误码 |
A0401 | 包含非法恶意跳转链接 | |
A0402 | 无效的用户输入 | |
A0410 | 请求必填参数为空 | |
A0411 | 用户订单号为空 | |
A0412 | 订购数量为空 | |
A0413 | 缺少时间戳参数 | |
A0414 | 非法的时间戳参数 | |
A0420 | 请求参数值超出允许的范围 | |
A0421 | 参数格式不匹配 | |
A0422 | 地址不在服务范围 | |
A0423 | 时间不在服务范围 | |
A0424 | 金额超出限制 | |
A0425 | 数量超出限制 | |
A0426 | 请求批量处理总个数超出限制 | |
A0427 | 请求 JSON 解析失败 | |
A0430 | 用户输入内容非法 | |
A0431 | 包含违禁敏感词 | |
A0432 | 图片包含违禁信息 | |
A0433 | 文件侵犯版权 | |
A0440 | 用户操作异常 | |
A0441 | 用户支付超时 | |
A0442 | 确认订单超时 | |
A0443 | 订单已关闭 | |
A0500 | 用户请求服务异常 | 二级宏观错误码 |
A0501 | 请求次数超出限制 | |
A0502 | 请求并发数超出限制 | |
A0503 | 用户操作请等待 | |
A0504 | WebSocket 连接异常 | |
A0505 | WebSocket 连接断开 | |
A0506 | 用户重复请求 | |
A0600 | 用户资源异常 | 二级宏观错误码 |
A0601 | 账户余额不足 | |
A0602 | 用户磁盘空间不足 | |
A0603 | 用户内存空间不足 | |
A0604 | 用户 OSS 容量不足 | |
A0605 | 用户配额已用光 | 蚂蚁森林浇水数或每天抽奖数 |
A0700 | 用户上传文件异常 | 二级宏观错误码 |
A0701 | 用户上传文件类型不匹配 | |
A0702 | 用户上传文件太大 | |
A0703 | 用户上传图片太大 | |
A0704 | 用户上传视频太大 | |
A0705 | 用户上传压缩文件太大 | |
A0800 | 用户当前版本异常 | 二级宏观错误码 |
A0801 | 用户安装版本与系统不匹配 | |
A0802 | 用户安装版本过低 | |
A0803 | 用户安装版本过高 | |
A0804 | 用户安装版本已过期 | |
A0805 | 用户 API 请求版本不匹配 | |
A0806 | 用户 API 请求版本过高 | |
A0807 | 用户 API 请求版本过低 | |
A0900 | 用户隐私未授权 | 二级宏观错误码 |
A0901 | 用户隐私未签署 | |
A0902 | 用户摄像头未授权 | |
A0903 | 用户相机未授权 | |
A0904 | 用户图片库未授权 | |
A0905 | 用户文件未授权 | |
A0906 | 用户位置信息未授权 | |
A0907 | 用户通讯录未授权 | |
A1000 | 用户设备异常 | 二级宏观错误码 |
A1001 | 用户相机异常 | |
A1002 | 用户麦克风异常 | |
A1003 | 用户听筒异常 | |
A1004 | 用户扬声器异常 | |
A1005 | 用户 GPS 定位异常 | |
B0001 | 系统执行出错 | 一级宏观错误码 |
B0100 | 系统执行超时 | 二级宏观错误码 |
B0101 | 系统订单处理超时 | |
B0200 | 系统容灾功能被触发 | 二级宏观错误码 |
B0210 | 系统限流 | |
B0220 | 系统功能降级 | |
B0300 | 系统资源异常 | 二级宏观错误码 |
B0310 | 系统资源耗尽 | |
B0311 | 系统磁盘空间耗尽 | |
B0312 | 系统内存耗尽 | |
B0313 | 文件句柄耗尽 | |
B0314 | 系统连接池耗尽 | |
B0315 | 系统线程池耗尽 | |
B0320 | 系统资源访问异常 | |
B0321 | 系统读取磁盘文件失败 | |
C0001 | 调用第三方服务出错 | 一级宏观错误码 |
C0100 | 中间件服务出错 | 二级宏观错误码 |
C0110 | RPC 服务出错 | |
C0111 | RPC 服务未找到 | |
C0112 | RPC 服务未注册 | |
C0113 | 接口不存在 | |
C0120 | 消息服务出错 | |
C0121 | 消息投递出错 | |
C0122 | 消息消费出错 | |
C0123 | 消息订阅出错 | |
C0124 | 消息分组未 | |
C0130 | 缓存服务出错 | |
C0131 | key 长度超过限制 | |
C0132 | value 长度超过限制 | |
C0133 | 存储容量已满 | |
C0134 | 不支持的数据格式 | |
C0140 | 配置服务出错 | |
C0150 | 网络资源服务出错 | |
C0151 | VPN 服务出错 | |
C0152 | CDN 服务出错 | |
C0153 | 域名解析服务出错 | |
C0154 | 网关服务出错 | |
C0200 | 第三方系统执行超时 | 二级宏观错误码 |
C0210 | RPC 执行超时 | |
C0220 | 消息投递超时 | |
C0230 | 缓存服务超时 | |
C0240 | 配置服务超时 | |
C0250 | 数据库服务超时 | |
C0300 | 数据库服务出错 | 二级宏观错误码 |
C0311 | 表不存在 | |
C0312 | 列不存在 | |
C0321 | 多表关联中存在多个相同名称的列 | |
C0331 | 数据库死锁 | |
C0341 | 主键冲突 | |
C0400 | 第三方容灾系统被触发 | 二级宏观错误码 |
C0401 | 第三方系统限流 | |
C0402 | 第三方功能降级 | |
C0500 | 通知服务出错 | 二级宏观错误码 |
C0501 | 短信提醒服务失败 | |
C0502 | 语音提醒服务失败 | |
C0503 | 邮件提醒服务失败 |
如果觉得这篇文章对您有所帮助的话,请动动小手点波关注💗,你的点赞👍收藏⭐️转发🔗评论📝都是对博主最好的支持~
相关文章:

瑞_Java开发手册_(二)异常日志
文章目录 异常日志的意义(一) 错误码(二) 异常处理(三) 日志规约附:错误码列表 🙊前言:本文章为瑞_系列专栏之《Java开发手册》的异常日志篇,本篇章主要介绍异常日志的错误码、异常处理、日志规约。由于博主是从阿里的《Java开发手…...

Elasticsearch:Search tutorial - 使用 Python 进行搜索 (四)
在本节中,你将了解另一种机器学习搜索方法,该方法利用 Elastic Learned Sparse EncodeR 模型或 ELSER,这是一种由 Elastic 训练来执行语义搜索的自然语言处理模型。这是继之前的文章 “Elasticsearch:Search tutorial - 使用 Pyth…...

Python之Matplotlib绘图调节清晰度
Python之Matplotlib绘图调节清晰度 文章目录 Python之Matplotlib绘图调节清晰度引言解决方案dpi是什么?效果展示总结 引言 使用python中的matplotlib.pyplot绘图的时候,如果将图片显示出来,或者另存为图片,常常会出现清晰度不够的…...

pygame.error: video system not initialized
错误处理方式: pygame.init() 增加此行...

java面试题2024
前言 准备换工作了,给自己定个目标,每天至少整理出一道面试题。题型会比较随机,感觉这样更容易随机到面试官要问的东西。整理时我会把我认为正确的回答写出来,比较复杂的也尽量把原理贴出来,争取做到无论为了应付面试&…...

配置git服务器
第一步: jdk环境配置 (1)搜索【高级系统设置】,选择【高级】选项卡,点【环境变量】 (2)在【系统变量】里面,点击【新建】 (3)添加JAVA_HOME环境变量JAVA_HO…...

vue3环境下,三方组件中使用echarts,无法显示问题
问题描述: vue3中,使用了三方组件primevue的侧边栏Sidebar,在其中注册echarts dom节点,无法显示,提示dom不存在 问题分析: 使用原生div,通过document.getElementById(),将echarts…...

FAST OS DOCKER 可视化Docker管理工具
介绍 FAST OS DOCKER 界面直观、简洁,非常适合新手使用,方便大家轻松上手 docker部署运行各类有趣的容器应用,同时 FAST OS DOCKER 为防止服务器负载过高,进行了底层性能优化;其以服务器安全为基础,对其进…...

MOJO基础语法
文章目录 打印变量及方法声明结构体python集成 打印 print("Hello Mojo!")变量及方法声明 变量: 使用’ var ‘创建一个可变的值,或者用’ let 创建一个不可变的值。 方法: 方法可以使用python中的def 方法声明,也引…...

java基础之IO流之字符流
字符流 传输char和String类型的数据 输入流 抽象父类:Reader 节点流:FileReader 常用方法 int read():读取一个字符,读取到达末尾,返回-1 package com.by.test2; import java.io.FileNotFoundException; import…...

chromium通信系统-ipcz系统(十一)-mojo binding
关于mojo binding的官方文档为mojo docs。 由于比较复杂,这里只做简单源码分析。 我们知道要实现rpc,必须实现客户端和服务端。 mojo 实现了一套领域语言,通过领域语言描述接口和数据, 再通过特有编译器编译成c代码。 这个过程会…...

鸿蒙开发基础-Web组件之cookie操作
使用ArkTS语言实现一个简单的免登录过程,向大家介绍基本的cookie管理操作。主要包含以下功能: 获取指定url对应的cookie的值。设置cookie。清除所有cookie。免登录访问账户中心。 cookie读写操作 首次打开应用时,应用首页的Web组件内呈现的…...

什么是k8s和声明式编程?
认识k8s之后,他的操作模式对我来说是一种很不错的体验。他提供了更接近现实世界的面向对象接口。 什么是k8s? Kubernetes(K8s)是一种开源容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它简化了容器化应用…...

Fluids —— MicroSolvers DOP
目录 Gas SubStep —— 重复执行对应的子步 Switch Solver —— 切换解算器 Gas Attribute Swap —— 交换、复制或移动几何体属性 Gas Intermittent Solve —— 固定时间间隔计算子解算器 Gas External Forces —— 计算外部力并更新速度或速度场 Gas Particle Separate…...

工业智能网关:HiWoo Box远程采集设备数据
工业智能网关:HiWoo Box远程采集设备数据 在工业4.0和智能制造的浪潮下,工业互联网已成为推动产业升级、提升生产效率的关键。而在这其中,工业智能网关扮演着至关重要的角色。今天,我们就来深入探讨一下工业智能网关。 一、什么…...

Apollo之原理和使用讲解
文章目录 1 Apollo1.1 简介1.1.1 背景1.1.2 简介1.1.3 特点 1.2 基础模型1.3 Apollo 四个维度1.3.1 application1.3.2 environment1.3.3 cluster1.3.4 namespace 1.4 本地缓存1.5 客户端设计1.5.1 客服端拉取原理1.5.2 配置更新推送实现 1.6 总体设计1.7 可用性考虑 2 操作使用…...

魅族MX4pro系统升级、降级
网上的教程都是按住开机键音量上或者下键,但是我按了没用,还是直接点击压缩包管用。 下载系统 官网地址(所有手机固件):https://flyme.cn/firmware.html 官方魅族mx4Pro系统:https://flyme.cn/firmwarelis…...

【Docker】快速入门之Docker的安装及使用
一、引言 1、什么是Docker Docker是一个开源的应用容器引擎,它让开发者可以将他们的应用及其依赖打包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之…...

记录汇川:H5U于Factory IO测试13
主程序: 子程序: IO映射 子程序: 辅助出料 子程序: 模式选择 子程序: 示教程序 子程序: 手动程序 子程序: 统计程序 子程序: 异常报警 子程序: 自动程序: F…...

PYTHON通过跳板机巡检CENTOS的简单实现
实现的细节和引用的文件和以前博客记录的基本一致 https://shaka.blog.csdn.net/article/details/106927633 差别在于,这次是通过跳板机登陆获取的主机信息,只记录差异的部份 1.需要在跳板机相应的路径放置PYTHON的脚本resc.py resc.py这个脚本中有引用的文件(pm.sh,diskpn…...

网络配置以及命令详解
传统linux中,网络接口为eth0,eth1,eth2,..... RHEL 7以上版本默认命名是基于分配上的固定名称,ens33 接口类型: en:以太网有线接口 wl:无线局域网接口 ww:无线广域网 dmesg:显示开机信息 适配器类型: s:热插拔插槽 o:板载 p:pci类型 ifconfig ens160(命令行配置,临时生效):查…...

商务外语MR混合现实仿真情景实训教学
MR混合现实技术是一种将虚拟世界与真实世界相结合的技术。通过MR设备,我们可以将虚拟的场景、人物、物品等元素实时地呈现在真实的环境中,实现真实与虚拟的完美融合。在商务外语的实训教学中,MR技术可以为我们提供丰富的场景资源,…...

牛客周赛 Round 28 解题报告 | 珂学家 | 组合数学 + 离散化树状数组
前言 整体评价 还是E稍微有点意思,新周赛好像比预期要简单一些, _. 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 小红的新周赛 思路: 模拟 #include <bits/stdc.h>using namespace std;int main() {int res 0;for (int i 0; i < 6; i…...

Python系列(3)—— 变量
变量 一、变量命名规范二、变量赋值三、变量的数据类型四、变量的作用域五、变量类型转换 Python编程中,变量是存储数据的容器。它们用于存储各种数据类型,如整数、浮点数、字符串、列表、字典等。理解变量及其工作原理是Python编程的基础。 一、变量命…...

Java 并发性和多线程2
四、如何创建并运行 java 线程 Java 线程类也是一个 object 类,它的实例都继承自 java.lang.Thread 或其子类。 可以用如下方式用 java 中创建一个线程: Tread thread new Thread(); 执行该线程可以调用该线程的 start()方法: thread.start(); 在上…...

最新消息:OpenAI GPT Store 正式上线,GPTs 应用商店来了!
原文链接 https://openaigptguide.com/gpt-store-and-chatgpt-team/ OpenAI推出的两款新产品和服务:GPT Store和ChatGPT Team,提供了许多全新的解决方案和功能,旨在帮助用户更轻松地使用和构建GPT工具,同时也增加了公司的收入来源…...

memory泄露分析方法(java篇)
#memory泄露主要分为java和native 2种,本文主要介绍java# 测试每天从monkey中筛选出内存超标的app,提单流转到我 首先,辨别内存泄露类型(java,还是native) 从采到的dumpsys_meminfo_pid看java heap&…...

kubectlkubeletrancherhelmkubeadm这几个命令行工具是什么关系?
背景 在最近学习k8s的过程中,发现kubectl&kubelet&rancher&helm&kubeadm这几个命令怎么在交错使用,他们究竟是什么关系?他们分别应该在什么情况下使用呢?这里我进行了简单的总结,做个区分。 各工具说…...

Day26 669修剪二叉搜索树 108有序数组转为二叉搜索树 538二叉搜索树转换为累加树
669 修剪二叉搜索树 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。 class Solution { pub…...

优化CentOS 7.6的HTTP隧道代理网络性能
在CentOS 7.6上,通过HTTP隧道代理优化网络性能是一项复杂且细致的任务。首先,我们要了解HTTP隧道代理的工作原理:通过建立一个安全的隧道,HTTP隧道代理允许用户绕过某些网络限制,提高数据传输的速度和安全性。然而&…...