slf4j是一個日誌服務中間層。slf4j封裝了多種日誌庫的接口,使用slf4j後,若是要修改程序使用的日誌庫,只須要將對應日誌庫的jar放入classpath,不須要修改任何代碼。slf4j爲部署時更換日誌庫提供了靈活便利。apache
下面是一個來自slf4j官網的例子。api
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的基本用法。在編譯和執行時,須要將slf4j-api-1.7.22.jar和slf4j-simple-1.7.22.jar加入classpath。這兩個jar包能夠從slf4j官網下載。spa
log4j2是一個日誌庫。log4j2是log4j的第二版,log4j2和log4j並不兼容。目前,log4j已經中止維護。debug
slf4j做爲日誌服務中間層,將調用方和日誌庫隔離開,調用方不須要知道任何日誌庫的細節。在部署時,只需將對應日誌庫的jar包加入classpath,就能夠使用這個日誌庫。 將上面例子中的classpath稍做修改,增長下面3個jar包:log4j-slf4j-impl-2.x.jar、log4j-api-2.x.jar、log4j-core-2.x.jar,移除slf4j-simple-1.7.22.jar, 就成了slf4j和log4j的HelloWorld示例。日誌
若是使用log4j2做爲日誌庫,須要對其進行配置。log4j2的默認配置文件是classpath下的log4j2.xml。下面是一個簡單的log4j2.xml文件示例。xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
在編譯時,classpath中須要加入對象
在運行時,classpath須要加入接口
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.info("Hello"); logger.debug("Temperature set to {}.", t);
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
slf4j支持如下級別的日誌部署
log4j2的默認配置文件是classpath中的log4j2.xml。在啓動程序時,能夠經過設置參數log4j.configurationFile的方式手動指定log4j2配置文件。get
-Dlog4j.configurationFile=log4j2.xml