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