Java 日志框架与实现

阅读更多

   Java程序目前最常使用的日志框架有JCL(Jakarta Commons-Logging)SLF4J(Simple Logging Facade for Java),而我们技术框架中的SpringStruts使用JCL,而Hibernate使用SLF4j目前广泛使用的Java日志门面库。通过动态查找的机制,在程序运行时自动找出真正使用的日志库。而SLF4j类似于Apache Common-Logging,但它在编译时静态绑定真正的Log库。还有一种是JDK提供的JUL(java.util.logging),因应用不成功,不做介绍。

 

日志框架的目的是为“所有的Java日志实现”提供一个统一的接口,所以需要由日志实现提供具体的日志功能。目前常用的两种日志实现是Log4jLogbackLog4j是当前使用最多的日志实现,但Logback作为一个通用可靠、快速灵活的日志框架,将作为Log4j的替代,并且它们均出自同一团队的开源项目

 

在上面的框架和实现组合中,JCL+Log4jSLF4j+Logback作为常用的完整日志系统实现组合。JCL的的日志也可以转向SLF4j,使用的是jcl-over-slf4j插件;而SLF4j也可以选择Log4j作为实现,使用的是slf4j-log4j插件。一个形象化描述常用日志框架和实现的关系如下图所示:

 


Java 日志框架与实现_第1张图片
 

 

我们系统选择的日志完整实现方案为:SLF4J+Logback,另外考虑到Spring等其他基础框架采用了JCL,我们采用jcl-over-slf4j进行请求转换。jcl-over-slf4j提供了Commons-Logging接口,在程序中我们使用common-loggin的接口,但底层是由SLF4J选择Logback作为日志实现。

 

选择理由:

 

日志组合

JCL+Log4j

SLF4J+Logback

优点

l使用的成熟

l案例丰富

l越来越多选择其作为日志方案,如HibernateiBatis

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 日志框架与实现_第2张图片
  • 大小: 17.4 KB
  • 查看图片附件

你可能感兴趣的:(log4j,logback,SLF4J)