java slf4j 例子_Java日志框架slf4j剖析

简单回顾门面模式

slf4j是门面模式的典型应用,所谓门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。

用一张图来表示门面模式的结构为:

e1e94435a27cdd1d719cb43bbbf9fa8b.png

门面模式的核心为Facade即门面对象,门面对象核心为几个点:

知道所有子角色的功能和责任

将客户端发来的请求委派到子系统中,没有实际业务逻辑

不参与子系统内业务逻辑的实现

我们为什么要使用slf4j

举个例子:

我们自己的系统中使用了logback这个日志系统

我们的系统使用了A.jar,A.jar中使用的日志系统为log4j

我们的系统又使用了B.jar,B.jar中使用的日志系统为slf4j-simple

这样,我们的系统就不得不同时支持并维护logback、log4j、slf4j-simple三种日志框架,非常不便。

解决这个问题的方式就是引入一个适配层,由适配层决定使用哪一种日志系统,而调用端只需要做的事情就是打印日志而不需要关心如何打印日志,

slf4j或者commons-logging就是这种适配层,slf4j是本文研究的对象。

从上面的描述,我们必须清楚地知道一点:slf4j只是一个日志标准,并不是日志系统的具体实现。理解这句话非常重要,slf4j只做两件事情:

提供日志接口

提供获取具体日志对象的方法

slf4j-simple、logback都是slf4j的具体实现,log4j并不直接实现slf4j,但是有专门的一层桥接slf4j-log4j12来实现slf4j。

为了更理解slf4j,我们先看例子,再读源码,相信读者朋友会对slf4j有更深刻的认识。

slf4j应用举例

上面讲了,slf4j的直接/间接实现有slf4j-simple、logback、slf4j-log4j12,我们先定义一个pom.xml,引入相关jar包:

4.0.0

org.xrq.log

log-test

1.0.0

jar

log-test

http://maven.apache.org

UTF-8

junit

junit

4.11

test

org.slf4j

slf4j-api

1.7.25

ch.qos.logback

logback-classic

1.2.3

org.slf4j

slf4j-simple

1.7.25

log4j

log4j

1.2.17

org.slf4j

slf4j-log4j12

1.7.21

写一段简单的Java代码:

@Test

public void testSlf4j() {

Logger logger = LoggerFactory.getLogger(Object.class);

logger.error("123");

}

注意:

1. 不引入任何slf4j的实现类,运行Test方法,没有任何日志的输出(slf4j不提供日志的具体实现,只有slf4j是无法打印日志的)。

2. 只要引入了一个slf4j的具体实现类,即可使用该日志框架输出日志。

3. 引入多个slf4j的具体实现类,引入logback-classic、slf4j-simple、log4j,可以输出日志,但是会输出一些告警日志,提示我们同时引入了多个slf4j的实现,然后选择其中的一个作为我们使用的日志系统。

从例子我们可以得出一个重要的结论,即slf4j的作用:只要所有代码都使用门面对象slf4j,我们就不需要关心其具体实现,最终所有地方使用一种具体实现即可,更换、维护都非常方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值