slf4j 從頭開始

    最近在公司的一個項目裏看到人家都在用self4j,開始不知道是什麼。後來讓我本身寫一個工具須要寫日誌,就想起了log4j可是也不是很熟悉。就在網上找各類日誌相關的資源,看到了諸如java.util.logging包中的logger ,log4j,slf4j,logback,common-logging 等好多日誌相關的東西,搞得頭暈腦脹的。從今天開始先研究。   java

    sef4j的使用其實我也不知道那就從頭開始嘍。 api

    slf4j的下載地址http://www.slf4j.org 函數

   按照官方的說法,slf4j是一個用於日誌系統的簡單Facade,容許最終用戶在部署其應用時使用其所但願的日誌系統。而在使用slf4j的時候,不須要在代碼中或配置文件中指定你打算使用那個具體的日誌系統,slf4j提供了統一的記錄日誌的接口,只要按照其提供的方法記錄便可,最終日誌的格式、記錄級別、輸出方式等經過具體日誌系統的配置來實現,所以能夠在應用中靈活切換日誌系統。  工具

使用方式 

this

  在系統開發中,統一按照slf4j的API進行開發,在部署時,選擇不一樣的日誌系統包,便可自動轉換到不一樣的日誌系統上。好比:選擇JDK自帶的日誌系統,則只須要將slf4j-api-1.6.1.jar和slf4j-jdk14-1.6.1.jar放置到classpath中便可,若是中途沒法忍受JDK自帶的日誌系統了,想換成log4j的日誌系統,僅須要用slf4j-log4j12-1.6.1.jar替換slf4j- jdk14-1.6.1.jar便可(須要log4j的jar及配置文件log4j.properties文件),也可使用slg4j提供的 simple log,slf4j-simple-1.6.1.jar替換slf4j-jdk14-1.6.1.jar。  spa

   

package com.test;    
        
    import org.slf4j.Logger;    
    import org.slf4j.LoggerFactory;    
       
    public class Slf4jTest {    
        // 統一按照slf4j的API進行開     
        
        Logger logger = LoggerFactory.getLogger(Slf4jTest.class);       
           
      public void testLog(){       
           logger.info("this is a test log");       
       }        
       public static void main(String[] args) {       
           Slf4jTest slf = new Slf4jTest();       
               slf.testLog();       
       }       
   }


   
(1)使用JDK自帶的log輸出 

    在classpath中加入slf4j-api-1.6.1.jar和slf4j-jdk14-1.6.1.jar兩個包,而後運行main函數,輸出信息以下: 

  1. 2010-2-23 11:57:28 com.test.Slf4jTest testLog    
    信息: this is a test log
        


(2)使用slg4j提供的simple log 
    slf4j-simple-1.6.1.jar替換slf4j-jdk14-1.6.1.jar,選擇使用slf4j提供的simple log,輸出信息以下: 
    
   
  1. [main] INFO com.test.Slf4jTest - this is a test log
       


(3)log4j日誌輸出 
    用slf4j-log4j12-1.6.1.jar替換slf4j-simple-1.6.1.jar(記得classpath也須要增長log4j依賴jar包),同時增長一個log4j.properties文件 
   咱們須要修改下main方法,加載一下log4j.properties,如; 
  
public static void main(String[] args) {       
    System.setProperty("log4j.configuration", "log4j.properties");       
    Slf4jTest slf = new Slf4jTest();       
       slf.testLog();       
   }


這樣就能夠以log4j的方式輸出了。 

(4)格式化日誌 
SLF4J還提供了格式化日誌的功能,如事例中的語句: 
logger.info("Today is {}, Temperature set to {}. Old temperature was {}.", objs);


(5)日誌系統綁定原理  在應用中,經過LoggerFactory類的靜態getLogger()獲取logger。經過查看該類的代碼能夠看出,最終是經過StaticLoggerBinder.SINGLETON.getLoggerFactory()方法獲取LoggerFactory而後,在經過該具體的LoggerFactory來獲取logger的。類org.slf4j.impl.StaticLoggerBinder並不在 slf4j-api-1.6.1.jar包中,仔細查看每一個與具體日誌系統對應的jar包,就會發現,相應的jar包都有一個 org.slf4j.impl.StaticLoggerBinder的實現,不一樣的實現返回與該日誌系統對應的LoggerFactory,所以就實現了所謂的靜態綁定,達到只要選取不一樣jar包就能簡單靈活配置的目的。
相關文章
相關標籤/搜索