Logger的總結

背景

日誌重要性不言而喻:

  1. 快速定位和重現問題
  2. 發現服務瓶頸(服務耗時,當然這一部分也可以通過其他無入侵式監控方式實現)

日誌分類

分類 說明 @cols=1:一般面向人員
診斷日誌
  1. 函數調用入參和出參
  2. 外部服務調用
  3. 捕獲異常信息
  4. 關鍵中間變量變化
  5. 加載配置
  6. 操作定時服務
@cols=1:服務開發者
統計日誌
  1. 請求耗時
  2. 請求頭標識信息
  3. 請求時間
  4. 資源信息(cpu和memory佔用)
@cols=1:運維

日誌內容

原則

目前只針對診斷日誌做說明

原則 說明
開始輸入參數 方便重現問題
結束輸出參數 判斷是否符合預期
中間關鍵變量變化 儘量保證一個函數一個職責,減少中間變量
不可達代碼打印記錄 方便查找bug
避免打印日誌引入異常 比如: null引用,一般框架會自帶處理
logging 對於不需要輸出的日誌(DEBUG)所做的操作,避免性能損耗,比如說字符串拼接
設置【日誌等級 生產環境關閉debug日誌,避免浪費磁盤和大量日誌干擾問題的定位
不要打印敏感信息 用戶密碼,key之類的
打印捕獲異常日誌 方便知道異常信息

格式

【時間】,【 等級】, 【traceId/clusterId】,【module/function】 【action】, 【changed value/arguments】 (5W1H)

參考

  1. 3.服務日誌規範文檔  !!! 強力推薦 !!!
  2. 阿里巴巴Java開發手冊-日誌規約
  3. LOGGING BEST PRACTICES: THE 13 YOU SHOULD KNOW