1. 程式人生 > >log4j和slf4j日誌框架入門

log4j和slf4j日誌框架入門

簡單日記門面(simple logging Facade for java)SLF4J是為各種loging APIs提供一個簡單統一的介面,從而使得終端使用者能夠在部署的時候配置自己希望的loging APIs實現。 準確的說,slf4j並不是一種具體的日誌系統,而是一個使用者日誌系統的facade,允許使用者在部署最終應用時方便的變更其日誌系統。 在系統開發中,統一按照slf4j的API進行開發,在部署時,選擇不同的日誌系統包,即可自動轉換到不同的日誌系統上。比如:選擇JDK自帶的日誌系統,則只需要將slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar放置到classpath中即可,如果中途無法忍受JDK自帶的日誌系統了,想換成log4j的日誌系統,僅需要用slf4j-log4j12-1.5.10.jar替換slf4j-jdk14-1.5.10.jar即可( 當然也需要log4j的jar及 配置檔案

slf4j門面原理

在java中使用slf4j

獲得logger物件:


java程式碼:
  1. privatestaticfinal Logger logger = LoggerFactory.getLogger(Test.class);   
  2. 輸出日誌資訊:   
  3. logger.debug(“debug”);  
private static final Logger logger = LoggerFactory.getLogger(Test.class);
輸出日誌資訊:
logger.debug(“debug”);

slf4j中的佔位符—不再需要冗長的級別判斷

大家應該還記得,在log4j中,為了提高執行效率,往往在輸出資訊之前,還要進行級別判斷,以避免無效的字串連線操作。如下: if (logger.isDebugEnabled()){ logger.debug(“debug:“+name); } slf4j巧妙的解決了這個問題:先傳入帶有佔位符的字串,同時把其他引數傳入,在slf4j的內容部實現中,如果級別合適再去用傳入的引數去替換字串中的佔位符,否則不用執行。 logger.info("{} is {}", new String[]{“x",“y"});