Java程序目前最常使用的日志框架有JCL(Jakarta Commons-Logging)和SLF4J(Simple Logging Facade for Java),而我们技术框架中的Spring、Struts使用JCL,而Hibernate使用SLF4j。目前广泛使用的Java日志门面库。通过动态查找的机制,在程序运行时自动找出真正使用的日志库。而SLF4j类似于Apache Common-Logging,但它在编译时静态绑定真正的Log库。还有一种是JDK提供的JUL(java.util.logging),因应用不成功,不做介绍。
日志框架的目的是为“所有的Java日志实现”提供一个统一的接口,所以需要由日志实现提供具体的日志功能。目前常用的两种日志实现是Log4j和Logback。Log4j是当前使用最多的日志实现,但Logback作为一个通用可靠、快速灵活的日志框架,将作为Log4j的替代,并且它们均出自同一团队的开源项目。
在上面的框架和实现组合中,JCL+Log4j、SLF4j+Logback作为常用的完整日志系统实现组合。JCL的的日志也可以转向SLF4j,使用的是jcl-over-slf4j插件;而SLF4j也可以选择Log4j作为实现,使用的是slf4j-log4j插件。一个形象化描述常用日志框架和实现的关系如下图所示:
我们系统选择的日志完整实现方案为:SLF4J+Logback,另外考虑到Spring等其他基础框架采用了JCL,我们采用jcl-over-slf4j进行请求转换。jcl-over-slf4j提供了Commons-Logging接口,在程序中我们使用common-loggin的接口,但底层是由SLF4J选择Logback作为日志实现。
选择理由:
日志组合 |
JCL+Log4j |
SLF4J+Logback |
优点 |
l使用的成熟 l案例丰富 |
l越来越多选择其作为日志方案,如Hibernate、iBatis l日志性能高,支持参数化的log字符串,避免了之前为了减少字符串拼接的性能损耗而不得不写的if(logger.isDebugEnable()),现在你可以直接写:logger.debug(“current user is: {}”, user)。 |
缺点 |
l不再被维护 l不适用OSGi开发 l日志记录性能不高 |
lLogback作为Log4j的继任者 lLogback兼容Log4j,但提供更多的扩展 |
就性能这一项,经过测试,在相同配置下,在连续输出100万条日志记录的条件,它们的生成日志文件和所花费时间比较如下:
日志组合 |
JCL+Log4j |
SLF4J+Logback |
文件大小 |
74M |
70M |
花费时间 |
52秒 |
37秒 |
相关推荐
一种Java日志系统框架的设计与实现( 一种Java日志系统框架的设计与实现( 一种Java日志系统框架的设计与实现( 一种Java日志系统框架的设计与实现
JAVA日志框架适配-冲突解决方案.docx
Java日志框架整合详情
适用于java中的Logback日志框架
一种Java日志系统框架的设计与实现(转)
一个简单的日志框架,很早写的,五一闲了两天,修一修注释一下拿出来共享。。。。。。 注意: 该日志框架五脏不全。。。。。 改进意见: 1.可以在配置文件中添加日志输出格式,然后在代码中读取该格式用以控制输出...
log4j和logback的helloworld以及与spring等的整合使用
自定义日志模块(接口及代理实现),而不直接使用第三方日志框架接口,避免在日志框架升级或者切换时,代码过多耦合。 这个举例说明一下: 比如,在某一项目开始时使用的是“log4j”框架,后面经过研究发现“sf4j...
Java日志框架详解.ppt
日志框架. 实现了动态的切换和log4j类似功能. 采用jdk1.4 log为底层实现. 下载后可以自己定制相关功能. 可以进一步完善.有兴趣可以加QQ:934547801一起讨论
日志记录是应用程序运行中必不可少的一部分。这篇文章主要介绍了浅谈Java日志框架slf4j作用及其实现原理,SLF4J是一个日志框架抽象层,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
了解Java日志系统框架的设计与实现.pdf
常用日志框架章节二:JUL1. 快速入门2. 日志级别3. Logger直接父子关系4. 配置文件5. 原理解析章节三:Log4j1. 快速入门2. Log4j组件解析3. Layout格式4. Appender输出5. 自定义Logger章节四:JCL1. 快速入门2. ...
一种Java日志系统框架的设计与实现 转)
这个代码实现了一个简单的应用程序,并使用了Logback日志框架来记录程序的运行日志。首先,我们通过调用...这个例子展示了如何使用Java的日志框架来实现应用程序的日志记录功能,可以提高程序的可维护性和可追踪性。
模拟qq空间的日志,使用Structs框架写的日志上传,评论。
项目名称:Java SSM框架集成日志功能增强Demo 主要编程语言:Java ...项目利用Java动态代理机制,通过实现InvocationHandler接口,巧妙地运用AOP(面向切面编程)实现了日志功能,增强了应用的可追踪性与维护性。
然而,现在主流的这几个日志框架基本都是基于实现类编程,而非接口编程,暴露了一些无关紧要的信息给用户,这种耦合没有必要,还有当应用系统在团队协作开发时,可能会同时出现多套日志框架,而且不同的日志框架api又...