1. 日志的類別
1.1 系統執行日志(log文件)
此類日志,主要為代碼執行時的日志打印,每個啟動的服務實例都會記錄程序的運行日志,主要用於問題排查。
開發、測試環境可放開DEBUG級別日志的輸出,生產環境必須關閉DEBUG,設置INFO級別以上打印輸出
1.2 系統操作日志(operator_log表存儲操作日志)
此類日志,主要為系統功能的操作日志,需記錄操作人,后端調用記錄操作人為“系統”。
此類日志設計,需考慮記錄功能模塊,手動或者自動(系統),保持日志功能查詢的靈活性。
同時,此類日志的文本,需產品提供對應的文本。
1.3 補償日志(消息消費、第三方接口補償重試記錄日志)
此類日志,針對MQ消費重試補償,冪等校驗,以及第三方支付、廠商、開放平台接口的調用補償,記錄等場景。
此類日志設計,需考慮記錄重試次數,執行結果,執行入參,對應業務,數據類型等。
1.4 代碼執行日志(第三方對接或特殊場景下例如硬件代碼執行關聯業務的日志或者服務關鍵點操作的接口調用日志)
此類日志,主要為特殊場景下的接口調用記錄,例如:三方支付調用數據記錄,用戶操作的源數據。
此類日志設計,也需考慮調用方,調用時間,數據狀態,調用參數等。
此類日志的作用,主要作用於記錄留檔,避免扯皮,有跡可循,有據可依。
2.日志的級別
FATAL
FATAL級別日志,代表系統崩潰。理論上,系統不允許FATAL級別的日志。
ERROR
ERROR級別日志,代表系統錯誤。主要記錄系統錯誤的日志,包含業務校驗錯誤,代碼執行錯誤,阻塞功能流程的故障。記錄時,需記錄錯誤場景,錯誤原因,故障時刻的源數據,入參,以及業務場景的關鍵數據。
例如:下單失敗時,日志需體現出失敗的原因,訂單號、酒店編碼,如涉及到校驗場景,例如產品校驗,則需加上產品編碼id等。方便快速錯誤原因,定位代碼。
WARN
WARN級別日志,代表系統警告。一般使用在不阻塞功能主流程,但出現了代碼執行錯誤異常或者校驗異常的場景。
例如:下單成功,推送系統通知。推送系統通知如果異常,不應影響下單成功。此處應打印WARN級別的警告日志。方便后續追溯統計,完善系統的健壯性。
INFO
INFO級別日志,代表系統正常執行。主要使用在功能的關鍵步驟處,記錄場景、入參、關鍵數據等。
例如:下單過程的每個關鍵流程步驟,應打印INFO日志。出現問題時,方便配合WARN、ERROR日志,反向追溯用戶行為和上下文數據,定位問題。
DEBUG
DEBUG級別日志,代表系統調試日志。主要為開發測試過程中,打印更加詳細的數據日志,以及第三方框架組件的代碼執行日志,打印時,應打印出系統運行時的詳細數據。
注:線上出現不緊急故障時,可通過指定方式動態調整日志級別,配合排查線上問題,此操作非常敏感,排查問題后,必須關閉DEBUG,恢復INFO級別。
3.日志打印規范
注:上述日志類別除1.1外,其他需要尤其注意的是設計方案。此處不針對那幾類進行詳細說明。
日志打印規范,要求對應上述1.1類別的系統執行日志。
示例:
說明:
log.warn記錄為WARN級別的執行日志,示例中打印WARN級別日志的原因:自動夜審接口調用,第一步關鍵參數校驗失敗,但不影響主題業務流程,可能是上游接口傳參異常,所以打印WARN級別。
log.info記錄為INFO級別的執行日志,示例中打印INFO級別日志的原因:打印點為系統執行的關鍵步驟,步驟前后打印INFO,方便排查定位系統執行是否正常。出現異常時,方便輔助排查問題。
log.error記錄為ERROR級別的執行錯誤日志,示例中帶引ERROR級別日志的原因:夜審執行異常,可能是代碼BUG,也可能是其他系統原因導致。夜審未正常執行,記錄錯誤點及參數,方便定位排查問題。
注:上述示例中的日志打印,場景為執行自動夜審,關鍵參數為執行哪家酒店的夜審,所以每條日志的打印,記錄場景的同時,需填充對應的酒店編碼。