slf4j 入門

jopen 11年前發布 | 30K 次閱讀 日志處理 SLF4j

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

   按照官方的說法,slf4j是一個用于日志系統的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日志系統。而在使用slf4j的時候,不需要在代碼中或配置文件中指定你打算使用那個具體的日志系統,slf4j提供了統一的記錄日志的接口,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過具體日志系統的配置來實現,因此可以在應用中靈活切換日志系統。 

使用方式 

  在系統開發中,統一按照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。 

   

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包就能簡單靈活配置的目的。


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!