博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
短小、精悍的日志输入接口:slf4j
阅读量:6705 次
发布时间:2019-06-25

本文共 1680 字,大约阅读时间需要 5 分钟。

  hot3.png

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

 

转载于:https://my.oschina.net/higuy/blog/750394

你可能感兴趣的文章
greenDao 中连接查询
查看>>
LinkedBlockingQueue的put,add跟offer的区别
查看>>
为数字世界和通证经济健康发展保驾护航 币氪产品发布会在蓉举行
查看>>
Spring3.2.9 + JdbcTemplate 学习
查看>>
Vue.js双向绑定的实现原理
查看>>
sql 语句执行顺序
查看>>
在eclipse中搭建struts2框架的详细过程
查看>>
计算机十二种常用密码破解法
查看>>
第1件事 产品经理工作的8个核心步骤
查看>>
ajax请求发送和页面跳转的冲突
查看>>
MonkeyRunner Mac环境 录制脚本和回放 批量回放
查看>>
C语言数据块读写函数:fread和fwrite
查看>>
自定义View之SimpleImageView的实现
查看>>
win7批量修改NTFS目录/文件的权限
查看>>
【hibernate merge】session1.merge(T entity)方法的含义和update方法的区别
查看>>
python基础复习 11
查看>>
java.io.File中的绝对路径和相对路径.
查看>>
解决trim兼容性
查看>>
windows 控制台cmd乱码(及永久修改编码)的解决办法
查看>>
War包反编译过程
查看>>