日誌規約


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 "  symbol : "  symbol);

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

正例: ( 條件)

if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
}

正例: ( 佔位符)

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

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

正例: <logger name="com.taobao.dubbo.config" additivity="false"> 


#6. 【強制】異常訊息應該包括兩類資訊:案發現場資訊和異常堆疊資訊。如果不處理,那麼往上拋。

正例: logger.error(各類別參數或物件toString "_" e.getMessage(), e);


#

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


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

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

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