Slf4j的原理
值得一提的是slf4j的作者,同时也是log4j和logback的开发者,名叫Ceki Gülcü。
slf4j和commons-logging的作用和基本原理是一样的,在slf4j-api中提供了两个接口:
org.slf4j.Logger
org.slf4j.ILoggerFactory
但是相比commons-logging, slf4j有两个不同之处,也可以说为优点:
第一:slf4j对ILoggerFactory的寻找上,是静态绑定,它必须存在一个类org.slf4j.impl.StaticLoggerBinder,指明使用的哪个日志框架,loggerfactory是那个。
为此,slf4j对几乎所有的日志框架都提供一个适配(adaptation)包,里面包含loggerfactory和logger的实现。以及一个org.slf4j.impl.StaticLoggerBinder类
使用slf4j和其它日志框架,只要引入slf4j-api包,以及对应的适配包即可。
下图是官方提供的一张图,slf4j绑定不同的日志实现:
第二:slf4j提供了一种占位符的接口形式,从而避免对字符串不必要的拼接。
举例:
如果用commons-logging打日志:
log.info(“my name is” + name +”,my age is ”+ age); |
如果log的日志级别配置的是ERROR,那么这句日志就不会输出,但是代码中的字符串拼接操作还是会执行。
为此,我们必须这样写:
If ( log. isInfoEnabled() ) { log.info(“my name is” + name +”,my age is ”+ age); } |
如果你使用slf4j, 你就可以优雅的这样写:
log.info(“my name is {}, my age is {}.”, name, age); |
除非注明,赵岩的博客文章均为原创,转载请以链接形式标明本文地址
本文地址:https://zhaoyanblog.com/archives/906.html