slf4j(简单日志门面)日志框架介绍(二)

日志门面的出现,目的就是在任何日志实现框架之间随意切换,而不需要改动一行代码。
所以如果你的代码中使用了slf4j-api打印日志。你可以通过更换适配包实现,更好不同的日志框架。

但是如果你的业务代码,或者依赖的sdk,使用了其它日志框架打印日志,例如commons-logging. 甚至直接使用了log4j等打印日志。怎么样切换到统一的日志框架呢?

Slf4j还提供了另外一系列的包:叫做桥接(Bridging)包,原理就是替换log4j,jul,jcl等日志框架的包,把日志导向slf4j。桥接包的原理,就是重写对应日志框架的api和实现,内部使用slf4j打印日志。

下图是slf4j官方提供的:

zhaoyanblog-2016-03-05-06-05-53

桥接到slf4j
1、jcl/log4j->slf4j
把对应的commons-logging、log4j包删除。
增加jcl-over-slf4j-1.7.xx.jar和log4j-over-slf4j-1.7.xx.jar包
2、jul->slf4j
因为jdk的logging是无法删除的,所以jul-to-slf4j-1.7.xx.jar是无法通过替换api的方式,实现对jul的替换。它是提供了一个jdk的扩展org.slf4j.bridge.SLF4JBridgeHandler
需要配置到jdk的logger.properties中
handlers = org.slf4j.bridge.SLF4JBridgeHandler
3、log4j2->slf4j
Log4j2到slf4j的桥接包,是log4j2官方提供的。叫做:
log4j-to-slf4j-2.x.jar
但是log4j2也提供了占位符的形式的日志,所以日志消息也可能会在传递给slf4j之前要先对日志进行格式化,官方文档说这个过程可能存在一定的性能损失。所以不建议这么做。
日志框架切换举例
这样,通过slf4j,我们可以实现任何日志框架之间的切换,而不需要修改代码。举例说明:
1、之前是commons-logging+log4j 打日志,现在想用slf4j+logback打日志。
删除
commons-logging-1.x.jar
log4j-1.2.xx.jar
增加
jcl-over-slf4j-1.7.xx.jar
slf4j-api-1.7.xx.jar
logback-classic-1.1.x.jar
logback-core-1.1.x.jar
即可完成切换

2、之前直接用log4j打日志,现在想用log4j2打日志
删除
log4j-1.2.xx.jar
增加
log4j-over-slf4j-1.7.xx.jar
slf4j-api-1.7.xx.jar
log4j2-api-2.x.jar
log4j2-core-2.x.jar
即可完成切换

  1. themebetter说道:

    我们网站的博客导航已添加了贵站,欢迎去看看

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *