簡單的Java日志模式(SLF4J)為各種日志架構,比如java.util、日志記錄、logback和log4j作為一個簡單的外觀或抽象。SLF4J允許使用者在部署時插入所需的日志架構。注意,SLF4J-enabling意味着你的 library/application 隻有一個強制性的依賴性,即slf4j-api-1.7.12.jar。
SINCE 1.6.0 如果沒有找到綁定類路徑,然後SLF4J将預設為無操作的實作。
SINCE 1.7.0 Logger提供了使用Object[]列印方法,這種變化意味着SLF4J需要JDK 1.5或更高版本。在底層Java編譯器将可變長度參數在方法中部分轉換為Object[]。
SINCE 1.7.5 對日志檢索進行了改善。
SINCE 1.7.9 通過将系統屬性slf4j.detectLoggerNameMismatch設定為true,可以實作SLF4J自動檢索錯誤命名。
一個簡單的示例
程式設計的傳統,下面是一個用SLF4J輸出”HelloWorld”的例子。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info(“Hello World”);
}
}
運作這個例子,你首先要下載下傳(http://www.slf4j.org/download.html)jar包并将其放到你的類路徑中。編譯和運作HelloWorld将導緻以下輸出被列印在控制台上。
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
這個警告是因為沒有在類路徑中發現slf4j綁定。若要消除警告,需要将以下的綁定添加到類路徑:
slf4j-api-1.7.12.jar
slf4j-simple-1.7.12.jar
編譯和運作HelloWorld現在将産生以下輸出:
0 [main] INFO HelloWorld - Hello World
Hello World
下面的示例代碼示範了SLF4J的典型使用模式
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Wombat {
final Logger logger = LoggerFactory.getLogger(Wombat.class);
Integer t;
Integer oldT;
public void setTemperature(Integer temperature) {
oldT = t;
t = temperature;
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
if(temperature.intValue() > 50) {
logger.info("Temperature has risen above 50 degrees.");
}
}
}
Typical usage pattern
SLF4J不依賴于任何特殊的類裝載機制。實際上,使用唯一的日志架構時SLF4J的綁定在編譯時是固定的。例如,slf4j-log4j12-1.7.12.jar在使用log4j時編譯。在代碼中,除了slf4j-api-1.7.12.jar外,隻能選擇一個适當的模式來綁定到類路徑。不要在類路徑中添加多餘的模式,下圖是常用模式所需要jar包的展示。
SLF4J接口和各種擴充卡是極其簡單的。而且SLF4J的加載和類加載器沒有關系,是以也沒有是以導緻的一些問題。
http://www.slf4j.org/manual.html
http://www.1024china.com/?p=208