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