SLF4J Log 層級
SLF4J 提供 ERROR、WARN、INFO、DEBUG、TRACE 等5種層級。
一般使用上建議 logger 層級的使用 。
- ERROR 為系統發生錯誤時的輸出訊息。
- WARN 當系統發生不正常或非預期結果的訊息,其嚴重度不似 ERROR 層級。
- INFO 輸出一般的資訊、輸出系統目前資訊、執行訊息,可做為平時記錄或監控使用。
- DEBUG 除錯用的資訊,提供更詳細的資訊,利於工程師處理問題,會影嚮系統效能,不建議在產品環境中開啟,適合用於開發階段或問題除錯使用。
- TRACE 比除錯更細微更詳盡的資訊內容,但影嚮效能甚鉅。
設定檔中 Logger 輸出層級
可在設定檔中設定 Logger 輸出的預設層級,以 LogBack 為例,若未指定預設的 Logger 層級為 INFO。
可依需求設定 Logger 的預設層級,各別套件或特定類別的輸出層級。
- OFF 停止 logger 輸出任何資訊
- ERROR 只輸出 Error 層級的錯誤訊息
- WARN 輸出 Warn 層級含以上的訊息
- INFO 輸出 Info 層級含以上的訊息
- DEBUG 輸出 Debug 層級含以上的訊息
- TRACE 輸出 Trace 層級含以上的訊息
- ALL 輸出所有的 Logger 系統訊息
在 Class 中使用 logger 物件
在 JSP 中使用
<%-- 使用 jsp 的宣告實體變數 --%> <%! private final Logger logger = LoggerFactory.getLogger(this.getClass());%> <% //在 jsp scriptlet 中使用 logger.info("username = {}", request.getParameter("username")); %>
與舊有的 JCL (Jakarta Commons Logger) 的比較
Commons logger 的語法
JCL 在輸出記錄前必須先判斷目前 Logger 系統的層級再做 Log 訊息的輸出,以確保 Logger 的效能。
if(logger.isDebugEnabled()) { logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i])); }
SLF4J 的等同語法
SLF4J 的寫法比較直覺,無須再去判斷目前的 log 層級,直接指定 log 層級輸出。
logger 的輸出與 JCL 不同,應採用參數的方法做輸出,減少不必要的字串組合所造成的效能秏損。
logger.debug("Entry number: {} is {}",i, String.valueOf(entry[i]));