架構之路-日誌規範

 

日誌信息是我們開發人員進行運行觀察、故障診斷、系統調優的重要工具,一個規範性的日誌記錄規則,對於線上問題排查定位,形成有效監控規則,

降低排查時間具有重大意義,同時日誌信息也是大數據的一部分,也需要遵循數據的規範(含安全)。

基本原則

  • 日誌輸出不可影響系統正常運行;

  • 日誌不可輸出保密信息;

  • 日誌內容可供開發人員定位問題;

  • 日誌內容可提供監控、調優信息;

  • 日誌內容可提供運行上下文場景還原、調用鏈追蹤信息。

  • 日誌內容儘量詳細:“charge 20 Yuan from account 34567 but 10 Yuan available” 而不是“charge failed”

  • 只打印技術異常,不打印用戶異常。用戶異常,如:用戶名或密碼錯誤

  • 要throw的異常 不要打日誌,最後一層打

  • 打出完整信息,包括stacktrace

  • 嚴格注意日誌級別

  • 不能使用System.out/err

時機

  • JDK或第三方工具拋出異常:這種情況通常是程序設計不合理造成的,會影響業務運行,是質量非常高的報錯。應當適當記錄日誌,根據實際結合業務的情況使用warn或者error級別;

  • 業務流程或數據不符合預期:常見的場景還包括外部參數不正確,數據處理問題導致狀態不在合理範圍內等等。開發人員需判斷能否容忍某種情形發生,而打印warn或error級別的日誌;

  • 系統核心關鍵動作:比如CA提供商的切換等關鍵操作要做info級別的記錄;

  • 系統啓動參數:系統運行往往依賴一些關鍵配置,這些參數可以以info級別記錄入日誌。

模板

logger.error(“[Class name.Method name] [Some Error Msg] happens. [Probably Because]. [Probably need to do] [params] .”, param1, param2);

Plain Text

推薦使用上邊模板打印日誌信息。總之日誌內容要讓別人看到日之後知道大概發生了什麼?應該怎麼處理?

默認日誌分類

service.log

dal.log -- dal層和mybatis日誌默認打印的文件;

task.log -- task層的日誌默認打印的文件;

default.log -- 除去上邊的日誌,其它日誌默認打印的地方;

error.log -- 異常日誌打印的日誌文件;

上述日誌默認日誌等級爲INFO,字符集是UTF-8。

注意:

 

1. 有必要才記錄日誌,避免頻繁過量無用日誌的產生;

2. 日誌等級必須嚴格區分,影響業務正常運行的情況纔可打印error級別日誌;

3. 禁止多個字符串拼接來組裝日誌信息,推薦使用參數方式;

4. 日誌要有格式,具有良好的可讀性;

5. 不可直接使用日誌系統(Log4j、Logback)中的API,而應依賴使用日誌框架SLF4J中的API,使用門面模式的日誌框架,有利於維護;

6. 各個類的日誌處理方式統一

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章