1. 程式人生 > >Java專案日誌記錄方案

Java專案日誌記錄方案

一、概述

1、採用slf4j作為日誌API,採用logback作為日誌輸出工具,用slf4j橋接方式替換掉log4j和commons-logging。

2、採用trace(追蹤)、debug(除錯)、info(資訊)、warn(警告)、error(錯誤)、fatal(致命)共6種日誌級別。

3、採用dev(開發環境)、test(測試環境)、production(生產環境)等不同的日誌配置,根據環境變數自動識別。

4、特殊的記錄,需要大批量寫入日誌檔案,應該採用非同步執行緒寫檔案。

二、日誌級別定義

    採用trace(追蹤)、debug(除錯)、info(資訊)、warn(警告)、error(錯誤)、fatal(致命)共6種日誌級別。

日誌級別使用原則:

1、fatal(致命錯誤)使用原則

fatal為系統級別的異常,發生fatal錯誤,代表伺服器整個或者核心功能已經無法工作了!!

1)在伺服器啟動時就應該檢查,如果存在致命錯誤,直接拋異常,讓伺服器不要啟動起來(啟動了也無法正常工作,不如不啟動)。

2)如果在伺服器啟動之後,發生了致命的錯誤,則記錄fatal級別的錯誤日誌,最好是同時觸發相關的修復和告警工作(比如,給開發和維護人員傳送告警郵件)。

2、error(錯誤)使用原則

error為功能或者邏輯級別的嚴重異常,發生error級別的異常,代表功能或者重要邏輯遇到問題、無法正常工作

3、warn(警告)使用原則

warn用在某些邏輯非常規,發生了一些小故障但是沒有大的影響或者重要資料被修改,或者某些操作需要引起重視

4、info(資訊)使用原則

info用於記錄一些有用的、關鍵的資訊,一般這些資訊出現得不頻繁只是在初始化的地方或者重要操作的地方才記錄

5、debug(除錯)使用原則

debug用於記錄一些除錯資訊,為了方便檢視程式的執行過程和相關資料、瞭解程式的動態

6、trace(跟蹤)使用原則

trace用於記錄一些更詳細的除錯資訊,這些資訊無需每次除錯時都打印出來,只在需要更詳細的除錯資訊時才開啟。

7、專案穩定執行時的日誌量

1)正常情況下,trace日誌至少是debug日誌的100倍,

trace級別的日誌量  debug級別的日誌量  >  100  1,

也就是說trace日誌非常多,debug日誌相對較少。

2)debug級別的日誌量  info級別的日誌量 > 1000 1,

也就是說正常情況下,info日誌很少,只在部分重要位置會輸出 info日誌。

3)error日誌和warn日誌,正常情況下,幾乎為0,當出現異常時,error日誌和warn日誌量 也在可控範圍,不會超過debug級別的最大日誌量。

三、日誌輸出(Appender)分類

分為5個一般類: 

    FILE_EXCEPTION (異常日誌,包括ERROR和WARN)

    FILE_APP (應用日誌,包括當前應用package下面的日誌和DEBUG級別以上的其他日誌)

    FILE_INFO (普通訊息日誌)

    FILE_DEBUG (除錯日誌)

    FILE_TRACE(追蹤日誌)

    SYSOUT(控制檯輸出,可以包括以上所有日誌)

擴充套件類: 包括非同步輸出的日誌,或者特殊業務日誌。

舉例說明:

假如 

當前應用的 Main Package 為 cn.zollty.lightning

ROOT_LEVEL為 trace,應用日誌 LEVEL 為 debug

有以下日誌列印:

1 2 3 4 5 6 7 8 9 10 11 12 13 Logger loggerA = LoggerFactory.getLogger(cn.zollty.lightning.Tests.class); loggerA.trace("--------"); loggerA.debug("--------"); loggerA.info("--------"); loggerA.warn("--------"); loggerA.error("--------"); Logger loggerB = LoggerFactory.getLogger(org.apache.kafka.Consumer.class); loggerB.trace("--------"); loggerB.debug("--------"); loggerB.info("--------"); loggerB.warn("--------"); loggerB.error("--------");

那麼,異常日誌(FILE_EXCEPTION)輸出的為:

loggerA.warn("--------");

loggerA.error("--------");

loggerB.warn("--------");

loggerB.error("--------");

控制檯(SYSOUT)輸出日誌的為;

loggerA.debug("--------");

loggerA.info("--------");

loggerA.warn("--------");

loggerA.error("--------");

loggerB.trace("--------");

loggerB.debug("--------");

loggerB.info("--------");

loggerB.warn("--------");

loggerB.error("--------");

應用日誌(FILE_APP)輸出的為:

loggerA.debug("--------");

loggerA.info("--------");

loggerA.warn("--------");

loggerA.error("--------");

loggerB.info("--------");

loggerB.warn("--------");

loggerB.error("--------");

2、歷史日誌檔案

異常日誌(error和warn)最多儲存 9000 M(生產,測試)

app日誌最多儲存 9000 M (生產,測試)

trace日誌最多儲存 1000 M (僅供測試用,一般不用)

debug、info日誌最多儲存 5000 M(一般不用,用app日誌就夠了)

四、各環境預設日誌定義

開發環境

1)預設日誌級別定義為:

    app包為TRACE級別。日誌的ROOT Level為DEBUG級別。

2)

啟用 System.out 控制檯輸出日誌;

啟用error.log為錯誤和警告日誌、app.log為應用日誌(包括app包下的日誌和其他INFO級別以上的日誌)。

測試環境