1.介绍
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单,允许最终用户在部署其应用时使用其所希望的日志系统。
2.解释
实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
3.用法
单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如apacheorg.apache.log4j.Logger,jdk自带的java.util.logging.Logger等等。
3.1导入slf4j包与blog框架包
比如我导入的
3.2配置blog文件
在logback.xml 文件中配置,比如我这样的配置
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
3.3应用
注:只需要在使用的类上面加一个@slf4j就能用了,可以看出来打印结果和刚才配置的文件中
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder>代码有关系,其实这就是规定了打印的出来的格式化。
4.优点
①与客户端解耦
想象一下下面的场景:
“ 有一个别人写的很棒的类库,里面使用的是jdk自带的java.util.logging.Logger这个日志系统,现在你有一个程序需要用到这个类库,并且你自己的程序现在是使用apache的org.apache.log4j.Logger这个日志系统。那么问题来了,如果你的程序导入了这个类库,那么是不是必须两种日志系统都要支持,那么你是不是需要多配置一些东西,多维护一些东西?耗费了太多维护成本,你想死的心都有了吧? 有问题就要有解决方案,不错,解决方案就是:使用slf4j。 slf4j只是一种接口,它本身并不关心你底层使用的是什么日志实现方案,所以它支持各种日志实现方案。简单的说,只要我们在类库中使用slf4j打日志,那么底层使用什么日志实现方案是使用者决定的,怎么决定?依靠配置文件和jar库。②省内存
③相对于System.out.print()来讲,不会造成阻塞。
④可以使用占位符,使代码量减少
比如
@Slf4jpublic class ConnectionTest { @Test public void testSLF4J(){ String name="lily"; String name2="tom"; String name3="lucy"; String name4="jack"; log.info("name:{},name2:{},name3:{},name4:{}",name,name2,name3,name4); }
运行结果:
20:25:26.953 [main] INFO Test.ConnectionTest - name:lily,name2:tom,name3:lucy,name4:jack