slf4j的点滴总结

一、slf4J简介:

slf4J(simple logging Facade for java)是为各种日志框架(如 java.util.logging,logback, log4j) 提供的一个简单统一的

接口,从而允许用户能够在部署的时候配置所希望的日志框架。


二、能看得懂英语的又有耐心的朋友可以拜访slf4j官网:http://www.slf4j.org


三、为何使用slf4j?

正如简介中所描述的,使用slf4j可以灵活配置各种不同的log框架,还可以在项目集成或引用的时候减少依赖包。比如A项目使用log4j作为实现的日志框架,而B项目使用的是logback作为实现的日志框架,如果AB项目整合,那么只需要一个日志框架即可,如果这两个项目都是使用slf4j API,那么就能轻松实现了。


四、来自官网的例子 HelloWorld

 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public classHelloWorld {
  public static voidmain(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

 

这个例子中只需要将slf4j-api-1.7.10.jar加入类路径即可。编译运行你会发现这个仅有slf4j-api接口,却没有实现的日志框架居然编译通过,只是运行时控制台将输出如下警告:

 

SLF4J: Failed toload class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting tono-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinderfor further details.

    通过添加一个基于slf4j接口实现的日志框架,如slf4j-simple-1.7.10.jar到类路径,那么警告将没有,日志能够正常输出如下。

 

[main]INFO HelloWorld - Hello World


    由此可见,可以单纯使用slf4j-api,只是所有日志将被忽略。只要再结合其他日志框架即可输出日志了。


五、窥探slf4j精髓

  从设计模式的角度上看,Slf4j-api在设计模式中是外观(facade)模式,能够实现完全解耦,对于如log4j这样一个不是基于slf4j-api实现的日志框架就需要一个slf4j-log4j.jar包作为适配器适配接口。

对slf4j做源码分析,不难看出slf4j-api与其他日志框架之间的绑定是仍是静态绑定的,在LoggerFactory类的bind()函数中,会通过类加载器查找类路径中是否有org.slf4j.impl.StaticLoggerBinder类,而slf4j-api中本身没有这个类,该类需由其他日志框架提供。并且band过程会检查是否有多个该类,这样会造成歧义,因此在类路径中,有且仅有一个具体实现的日志框架即可。

    关于slf4j的源码分析,推荐其他两篇优秀的博文:

  1. http://www.cnblogs.com/xing901022/p/4149524.html
  2. http://ketao1989.github.io/posts/Java-slf4j-Introduce.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值