假如你正在开发应用程序所调用的组件当中已经使用了 JCL(之前叫 Jakarta Commons Logging,JCL) 的,还有一些组建可能直接调用了 java.util.logging,这时你需要一个桥接器(名字为 XXX-over-slf4j.jar)把他们的日志输出重定向到 SLF4J,所谓的桥接器就是一个假的日志实现工具,比如当你把 jcl-over-slf4j.jar 放到 CLASS_PATH 时,即使某个组件原本是通过 JCL 输出日志的,现在却会被 jcl-over-slf4j “骗到”SLF4J 里,然后 SLF4J 又会根据绑定器把日志交给具体的日志实现工具。过程如下

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 会发生什么情况呢?没错,日志会被踢来踢去,最终进入死循环。

所以使用 SLF4J 的比较典型搭配就是把 slf4j-api、JCL 桥接器、java.util.logging(JUL)桥接器、log4j 绑定器、log4j 这5个 jar 放置在 CLASS_PATH 里。

不过并不是所有APP容器都是使用 log4j 的,比如 Google AppEngine 它使用的是 java.util.logging(JUL),这时应用 SLF4J 的搭配就变成 slf4j-api、JCL桥接器、logj4桥接器、JUL绑定器这4个 jar 放置在 WEB-INF/lib 里。

最新文章

  1. GDUFE-OJ 1361校庆抽奖 翻转
  2. Android 项目框架
  3. 通过JavaScript原型链理解基于原型的编程
  4. cordova-sqlite-plugin常用数据库操作
  5. 混合使用Jquery Deferred和Angularjs的$timeout(转)
  6. Quartz1.8.5例子(三)
  7. Python之路第十二天,高级(4)-Python操作rabbitMQ
  8. intellij idea 主题大全,看不惯idea 那2种主题的来这里了
  9. python-day12 MySQL、sqlalchemy
  10. CSS3 vmax的用法
  11. 混合app开发--js和webview之间的交互总结
  12. Confluence 6 配置 HTTP 超时设置
  13. Django之auth模块用户认证模块
  14. Palindrome II
  15. git使用简单指南
  16. js之点击值发生变化
  17. 理解URI
  18. superset dashboard 设置自动刷新
  19. Java框架-mybatis03使用注解实现mybatis
  20. 对称加密,API加密

热门文章

  1. 谈 DevOps 自动化时,也应该考虑到 SOX 等法案
  2. 1990-D. 幻方
  3. PowerDesigner(五)-概念数据模型(CDM生成LDM,PDM和OOM)
  4. C++创建一个动态链接库工程
  5. mysql concat和group_concat
  6. 【转】奇异值分解(We Recommend a Singular Value Decomposition)
  7. Android开发之实用小知识点汇总-1
  8. Python中的函数对象与闭包
  9. C/C++中static关键词的作用
  10. poj3270Cow Sorting(置换)