SLF4J 的几种实际应用模式--之一:SLF4J+Log4J
2015-10-21 22:07
405 查看
SLF4J(Simple Logging Facade for Java) 是一个通用的日志框架,不能何以谓之 Facade(门面),所扮眼的角色相当于 Jakarta Commons Logging。就像 JCL 需要底层的日志实现,如 Log4J、java.util.logging、Simple Logger 等来完成具体的信息输出,事实上基本总是 JCL+Log4J 那么一个绝配。SLF4J 的原旨也是能支持多种下层日志框架实现,但最好的日志实现仍然是 Log4J,所以本篇讲述 SLF4J 的第一种用法
SLF4J+Log4J。
需要的配置文件和组件包,下面三个 jar 文件和一个 properties 文件都是要放在项目的 ClassPath 上。
1. slf4j-api-1.5.11.jar
2. slf4j-log4j12-1.5.11.jar
3. log4j-1.2.15.jar
4. log4j.properties(也可以是 log4j.xml,本例中用 log4j.propertes)
前两个包在 http://www.slf4j.org/download.html 处下载,后一个包在http://logging.apache.org/log4j/1.2/download.html 下载,可能包文件名中的版本号有些差,不要紧。
log4j.properties 以前该是怎么写,现在还是怎么写,比如一个最简单的内容,只向控制台输出日志信息,如下:
2010-04-07 17:14:51,390 [com.unmi.TestSlf4j]-[INFO] Hello SLF4J
本文原始链接 http://unmi.cc/slf4j-log4j/,
来自 隔叶黄莺 Unmi Blog
把这种 SLF4J+Log4J 的使用模式与曾为霸主地位的 JCL+Log4J 的用法进行一下对比(请忽略掉包文件中的版本号):
SLF4J+Log4j 组合 | 对比 | JCL+Log4J 组合 |
slf4j-api-1.5.11.jar | 相当,定义高层 API | commons-logging-1.1.jar |
slf4j-log4j12-1.5.11.jar | 相当,左边是用绑定包,右边 是用配置文件来指定日志实现 | commons-logging.properties,内容为: org.apache.commons.logging.LogFactory= org.apache.commons.logging.impl.LogFactoryImpl 或者 org.apache.commons.logging.Log= org.apache.commons.logging.impl.Log4JLogger |
log4j-1.2.15.jar | 一样 | log4j-1.2.15.jar |
log4j.properties | 一样,原来怎么配置现在也是 | log4j.properties |
程序代码中: import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(TestSlf4j.class); logger.info("Hello {}","SLF4J"); | 左边侵入的是 SLF4J API,右边是被 JCL 的 API 污染了 SLF4J 支持参数化,而 JCL 不能 | 程序代码中: import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Log log = LogFactory.getLog(TestJCL.class); log.info("Hello JCL"); |
为什么会兴起 SLF4J,看看我们原来哪一个框架中,大的如 SSH 三雄(Spring、Struts、Hibernate),还有 WAS 应用服务器,小的就不计其数以前用的通用日志框架都清一色的 Jakarta Commons Logging(JCL),日志实现会选用 Log4j,为何现在 Hibernate、Tapesty、DbUnit、Jetty V6 等纷纷变节,都采用了 SLF4J 了呢?SLF4J 与 JCL 相比,定然是有其可表之处。而其中 SLF4J 受类加载器的影响较小,不易产生内存溢出的问题,性能得到了改善,更主要是顺应了潮流的发展--可方便部署到
OSGI 环境中。
关于当前有哪些项目改用了 SLF4J,请参看页面 http://www.slf4j.org/。
相关文章推荐
- QT下简易画板实现
- LeetCode Isomorphic Strings 哈希
- Palindrome Partitioning
- vs2010利用属性表自动配置OpenCV(XP的32位系统,opencv版本是2.4.10)
- 从问题到解决方案到应用-android-ApiDemo入口源代码学习及应用
- NoSQL是什么
- 用Qt实现2D绘图
- Oracle dblink详解(转)
- C# 之 管理配置文件(一)
- hdoj Be the Winner 2509 (NIM博弈)
- Qt学习之路(31): 一个简易画板的实现(QWidget)
- 无聊YOU把NES的CPU用MASM撸了一遍
- 关于标准分治、动态规划、贪婪选择三种策略的比较
- Matlab梯度下降解决评分矩阵分解
- css - user-select 禁止用户选择文字
- 对Property进行RACObserve
- Sublime Text: [Decode error - output not utf-8]
- Google《Android性能优化》大全
- 【Android杂谈】安卓开发必需了解 -AIDL(一)
- 参考51单片机示例程序要注意的一点