錯誤碼機制介紹
背景
Dubbo 內部依賴的 Logger 抽象層提供了日誌輸出能力,但大多數異常日誌沒有附帶故障排除說明,導致使用者看到異常後無法處理。
為了了解決這個問題,Dubbo 從 3.1 版本開始引入了錯誤碼機制,它將官方文件中錯誤碼的 FAQ 與日誌框架串聯起來,當日誌抽象輸出異常時,會附帶輸出對應的官網文件連結,引導使用者進行自主排查。
錯誤碼格式
[類別]-[序號]
兩個空格都是數字。第一個數字是類別,第二個數字是具體的錯誤碼。
提示顯示的格式
This may be caused by ..., go to https://dubbo.dev.org.tw/faq/[Cat]/[X] to find instructions.
此外,這句話後面還可以指定補充訊息(即 extendedInformation)。
顯示範例
[31/07/22 02:43:07:796 CST] main WARN support.AbortPolicyWithReport: [DUBBO] 執行緒池已耗盡!執行緒名稱:Test,池大小:0(活動:0,核心:1,最大:1,最大:0),任務:0(已完成:0),執行器狀態:(isShutdown:false,isTerminated:false,isTerminating:false),位於 dubbo://10.20.130.230:20880!,dubbo 版本:,目前主機:10.20.130.230,錯誤碼:0-1。這可能是因為太多客戶端請求供應商導致的,請前往 https://dubbo.dev.org.tw/faq/0/1 尋找說明。
使用者只需點擊連結即可根據錯誤碼查找原因。
Logger 介面支援
為了確保相容性,Dubbo 3.1 在原有的 Logger 抽象的基礎上建構了一個新的介面 ErrorTypeAwareLogger
。它擴展了 warn 級別的方法,如下所示
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 後面的句子。
錯誤級別也採用相同的擴展方式。