java slf4j_slf4j笔记

-----------------------------------------------------------

logger声明的讨论:

static和non-static各有好处:

static的CPU和内存性能更好

non-static对IOC更友好,而且在多个应用共用一套类库时,可以保持各自的日志环境

(logback无论如何都是安全的,但如果在多个应用分享同一个类库,并且为static的,那log4j会出问题:所有的日志都打印到第一个加载到内存的日志对象中)

在slf4j的1.5.3之后,non-static的logger不需要标记transient关键字,也不会被序列化(怎么做到的?)

建议的声明方式(我觉得加上static比较好,还有private):

final (static) Logger logger = LoggerFactory.getLogger(MyClass.class); -----------------------------------------------------------

迁移工具:

-----------------------------------------------------------

实现包:

唯一必要的包:slf4j-api.jar

slf4j-log4j12-1.6.4.jar

Binding for log4j version 1.2, a widely used logging framework. You also need to place log4j.jar on your class path.

需要把log4j的包也一同放进来。

slf4j-jdk14-1.6.4.jar

Binding for java.util.logging, also referred to as JDK 1.4 logging

绑定到jdk的日志中

slf4j-nop-1.6.4.jar

Binding for NOP, silently discarding all logging.

绑定到“无操作”,静默。

slf4j-simple-1.6.4.jar

Binding for Simple implementation, which outputs all events to System.err. Only messages of level INFO and higher are printed. This binding may be useful in the context of small applications.

最简单的实现,直接输出到控制台

slf4j-jcl-1.6.4.jar

Binding for Jakarta Commons Logging. This binding will delegate all SLF4J logging to JCL.

绑定到common-logging,桥接过去。

logback-classic-1.0.13.jar (requires logback-core-1.0.13.jar)

绑定到原生实现的logback上,性能最高

421ea7aea66c4c140ca452b673520bf4.png

在maven中声明包的实现:

对于普通项目(并不是一个工具包):

logback:

声明对logback-classic-1.0.13.jar的依赖即可,会自动关联依赖slf4j-api-1.7.7.jar和logback-core-1.0.13.jar(显式声明这两个关联依赖也可以)

log4j:

声明对slf4j-log4j12-1.7.7.jar的依赖即可,会自动关联依赖slf4j-api-1.7.7.jar和log4j-1.2.17.jar

jdk log:

声明对slf4j-jdk14-1.7.7.jar的依赖即可,会自动关联依赖slf4j-api-1.7.7.jar

对于工具包项目:

仅仅依赖slf4j-api即可,让用户自己决定底层用什么实现。

二进制兼容性:

各个api绑定包,与下面的日志实现包,其版本必须对应。比如slf4j-api-1.7.7.jar应该对应slf4j-simple-1.7.7.jar.

而上层的应用程序,与其依赖的slf4j-api是各个版本都完全兼容的。

支持MDC,同时需要底层的日志包也支持,例如logback或者log4j。

-----------------------------------------------------------

桥接包:

1,从Jakarta Commons Logging (JCL)迁移到slf4j: 用“jcl-over-slf4j.jar”替换掉“commons-logging.jar”即可

如果在maven中:1,明确的标记exclusion掉common-logging.jar。2,声明common-logging.jar的依赖范围为“provided”(在IED里显示不太好,注意顺序)。

2,很少见的特殊情况,想要把slf4j日志转移到JCL上:用slf4j-jcl.jar包

——上述两个包不能一起用,否则死循环(这很好理解)

3,从log4j迁移到slf4j(居然直接针对log4j编码,太2了):用“log4j-over-slf4j.jar”替换掉“log4j.jar”即可。

——上述包不能与“slf4j-log4j12.jar”一起用,否则死循环(一样的道理)。

4,从java.util.logging(JUL)迁移到slf4j——jvm自己的类不允许随便替换,所以这里比较复杂(SLF4JBridgeHandler+jul-to-slf4j.jar),而且有性能问题,很少用到,用的时候再研究。

——上述包不能与“slf4j-jdk14.jar”一起用,否则死循环(一样的道理)。

914abf9f3490ae99b592bc36074a7d56.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值