深入理解
如何让基于slf4j框架的日志依赖更干净 http://www.atatech.org/articles/70380
http://blog.csdn.net/yycdaizi/article/details/8276265
https://www.slf4j.org/legacy.html
日志框架:提供日志调用的接口,实际的日志输出委托给日志系统实现。
JCL(Jakarta Commons Logging):比较流行的日志框架,很多框架都依赖JCL,例如Spring等。
SLF4j:提供新的API,初衷是配合Logback使用,但同时兼容Log4j。
日志系统:负责输出日志
Log4j:较早的日志系统,可以单独使用,也可配合日志框架JCL使用
Logback:Log4j的替代产品,需要配合日志框架SLF4j使用
JUL(java.util.logging):JDK提供的日志系统,较混乱,不常用
确定需要具体用哪种日志系统,按上图来依赖jar包,除了要依赖的,其他全部干掉(仲裁掉或者exclusion)
如下slf4j+log4j:
Component
|
| log to Apache Commons Logging
V
jcl-over-slf4j.jar --- (redirect) ---> SLF4j ---> slf4j-log4j12-version.jar ---> log4j.jar ---> 输出日志
看到上面的流程图可能会发现一个有趣的问题,假如在 CLASS_PATH 里同时放置 log4j-over-slf4j.jar 和 slf4j-log4j12-version.jar 会发生什么情况呢?没错,日志会被踢来踢去,最终进入死循环。
最终会导致 StackOverflowError。所以像log4j-over-slf4j.jar AND slf4j-log4j12.jar, jcl-over-slf4j.jar AND slf4j-jcl.jar 都不能一起存在
网友评论