java簡單日志外觀(Simple Logging Fa?ade for Java, slf4j)是其他日志框架(如java.util.logging, logback, log4j)的一個(gè)簡單的外觀或抽象,以相同API使用不同的日志框架,在部署時(shí)插入自己喜歡的日志框架。
slf4j依賴項(xiàng)為 slf4j-api.jar,如果在類路徑上沒有綁定任何框架,則slf4j默認(rèn)不執(zhí)行任何操作。
Hello World
按照一貫習(xí)俗,下例解釋用最簡單的方式以slf4j輸出 "Hello world"。
| 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"); } } |
如果只將slf4j-api.jar添加到路徑中,運(yùn)行后出現(xiàn)如下信息:
| 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. |
因?yàn)閟lf4j沒有綁定任何日志框架,如果將slf4j-simple.jar添加到類路徑:
編譯后運(yùn)行,則控制臺出現(xiàn)如下輸出:
| [main] INFO cn.ac.dicp.slf4j.HelloWorld - 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 tem){ oldT = t; t = tem; logger.debug("temperature set to {}. Old temperature was {}.",toString(),oldT); if(tem.intValue() > 50){ logger.info("Temperature has risen above 50 degrees."); } } } |
注意上面的'{}'。
綁定日志框架
slf4j支持多種日志框架:
| slf4j-log4j12-1.7.12.jar | 綁定log4j 1.2,一個(gè)應(yīng)用廣泛的日志框架,在路徑中同時(shí)要添加log4j.jar. |
| slf4j-jdk14-1.7.12.jar | 綁定 java.util.logging,也稱為JDK 1.4 logging。 |
| slf4j-nop-1.7.12.jar | 綁定NOP,默默的放棄所有日志。 |
| slf4j-simple-1.7.12.jar | 綁定簡單實(shí)現(xiàn),輸出所有日志到System.err。只有l(wèi)evel 高于或等于INFO的信息輸出。 |
| slf4j-jcl-1.7.12.jar | 綁定Jakarta Commons Logging。 |
| logback-classic-1.0.13.jar | 需要logback-core-1.0.13.jar。 |
NATIVE IMPLEMENTATION 在slf4j外,也有slf4j自身的綁定礦建。如logback,本地實(shí)現(xiàn)slf4j。logback的 ch.qos.logback.classic.Logger類直接實(shí)現(xiàn)slf4j 的org.slf4j.Logger接口。因此,結(jié)合使用slf4j和logback的內(nèi)存和計(jì)算量幾乎為零。
更改日志框架,直接更改類路徑的包即可,如將slf4j-jdk14-1.7.12.jar換成 slf4j-log4j12-1.7.12.jar。slf4j一次只能綁定一個(gè)框架,不要在路徑上放置兩個(gè)或更多的連接jar。

slf4j接口及適配器都極為簡單。
Libraries
那些廣泛使用的組件和庫的作者使用slf4j接口,能避免終端用戶必須使用何種日志框架,用戶可以在部署時(shí)選擇喜歡的日志框架,更改對應(yīng)的連接jar即可,該方法簡單有效。
新聞熱點(diǎn)
疑難解答
圖片精選