错误代码机制介绍
背景
Dubbo 内部依赖的 Logger 抽象层提供了日志输出能力,但大部分异常日志都没有附带排查说明,导致用户看到异常后无法处理。
为了解决这个问题,从 Dubbo 3.1 版本开始,引入了错误代码机制。它将官方文档中的错误代码 FAQ 与日志框架连接起来。当日志的抽象输出异常时,会附带一个指向输出对应的官网文档链接,引导用户进行自主排查。
错误代码格式
[类别]-[X]
两个空格都是数字。第一个数字是类别,第二个数字是具体的错误代码。
提示显示格式
This may be caused by ..., go to https://dubbo.apache.org/faq/[Cat]/[X] to find instructions.
此外,在这句话之后还可以指定补充信息(即 extendedInformation)。
显示示例
[2022/07/31 02:43:07:796 CST] main WARN support.AbortPolicyWithReport: [DUBBO] 线程池已满!线程名:Test,线程池大小:0(活跃:0,核心:1,最大:1,最大:0),任务:0(已完成:0),执行器状态:(已关闭:false,已终止:false,正在终止:false),在 dubbo://10.20.130.230:20880! 中,dubbo 版本:,当前主机:10.20.130.230,错误代码:0-1。这可能是由于太多客户端请求提供者造成的,请访问 https://dubbo.apache.org/faq/0/1 获取说明。
用户只需点击链接,即可根据错误代码查找原因。
Logger 接口支持
为了确保兼容性,Dubbo 3.1 在原有的 Logger 抽象基础上构建了一个新的接口 ErrorTypeAwareLogger
。它扩展了警告级别的如下方法
void warn(String code, String cause, String extendedInformation, String msg);
void warn(String code, String cause, String extendedInformation, String msg, Throwable e);
其中,code 指的是错误代码,cause 指的是可能的原因(即 caused by… 后面的文字),extendedInformation 作为补充信息,直接附加在 caused by 这句话后面。
错误级别也做了同样的扩展。