日誌都要按照這種格式來寫,離阿里職位又近了一步

1. 【強制】應用中不可直接使用日誌系統 (Log 4 j 、 Logback) 中的 API ,而應依賴使用日誌框架SLF 4 J 中的 API ,使用門面模式的日誌框架,有利於維護和各個類的日誌處理方式統一。

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(Abc.class);

2. 【強制】日誌文件推薦至少保存 15 天,因為有些異常具備以“周”為頻次發生的特點。

3. 【強制】應用中的擴展日誌 ( 如打點、臨時監控、訪問日誌等 ) 命名方式:

appName _ logType _ logName . log 。 logType :日誌類型,推薦分類有

stats / desc / monitor / visit 等 ;logName :日誌描述。這種命名的好處:通過文件名就可知

道日誌文件屬於什麼應用,什麼類型,什麼目的,也有利於歸類查找。

正例: mppserver 應用中單獨監控時區轉換異常,如:mppserver _ monitor _ timeZoneConvert . log

說明:推薦對日誌進行分類,如將錯誤日誌和業務日誌分開存放,便於開發人員查看,也便於通過日誌對系統進行及時監控。

4. 【強制】對 trace / debug / info 級別的日誌輸出,必須使用條件輸出形式或者使用佔位符的方式。

說明: logger . debug( " Processing trade with id : " + id + " and symbol : " + symbol);

如果日誌級別是 warn ,上述日誌不會打印,但是會執行字符串拼接操作,如果 symbol 是對象,會執行 toString() 方法,浪費了系統資源,執行了上述操作,最終日誌卻沒有打印。

正例: ( 條件 )

if (logger.isDebugEnabled()) {

logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);

}

正例: ( 佔位符 )

logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

5. 【強制】避免重複打印日誌,浪費磁盤空間,務必在 log 4 j . xml 中設置 additivity = false 。

正例:

6. 【強制】異常信息應該包括兩類信息:案發現場信息和異常堆棧信息。如果不處理,那麼通過關鍵字 throws 往上拋出。

正例: logger.error(各類參數或者對象 toString + "_" + e.getMessage(), e);

7. 【推薦】謹慎地記錄日誌。生產環境禁止輸出 debug 日誌 ; 有選擇地輸出 info 日誌 ; 如果使用 warn 來記錄剛上線時的業務行為信息,一定要注意日誌輸出量的問題,避免把服務器磁盤撐爆,並記得及時刪除這些觀察日誌。

說明:大量地輸出無效日誌,不利於系統性能提升,也不利於快速定位錯誤點。記錄日誌時請

思考:這些日誌真的有人看嗎?看到這條日誌你能做什麼?能不能給問題排查帶來好處?

8. 【參考】可以使用 warn 日誌級別來記錄用戶輸入參數錯誤的情況,避免用戶投訴時,無所適從。注意日誌輸出的級別, error 級別只記錄系統邏輯出錯、異常等重要的錯誤信息。如非必要,請不要在此場景打出 error 級別。

有討論,才有進步,大家各抒己見,讓每位同學學到不一樣的!


分享到:


相關文章: