2010年10月4日 星期一

SLF4J 使用說明

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]));

參考資料

2010年2月3日 星期三

Google Collection Api

google code 上一組好用的 api 可以用來取代 apache commons collections api
google collections 提供一些好用的建構式及好用的方法,
可以參考以下範列