日志框架的介绍(网摘)
方茂
2023-12-01
1 概述 在日志框架出现之前,开发人员主要是通过自己实现的日志组件来实现日志的记录。这些日志组件都有着共同的问题:
■ 功能太弱,只能输出到控制台或指定的文件
■ 大量的日志代码混在业务逻辑中,代码可读性差,在正式环境中的日志打印无法控制导
致系统性能下降
■ 日志格式难以统一维护 日志框架的出现解决了上述的问题,降低了日志代码的耦合
性,通过配置提高日志记录的灵活性。
日志框架的基本概念为以下几点:
■ 输出级别:是调试信息,信息,还是警告,错误,致命错误等
■ 输出目的地:输出到控制台,文件,可写设备,还是数据库
■ 输出格式和内容:输出哪些东西,如何排版等。
Java领域里存在大量的日志框架和组件,www.open-open.com收录了二十多个基于java技术的日志框架。 这些日志框架从功能上可分为三类。
一是日志工具类,它实现了日志的记录,格式和级别的划分,代表为Logback Simplelog。
二是日志系统,提供了完整的框架功能并实现了日志记录。代表为JDK Logger、log4j和commons-logging。
三是抽象整合类,它提供了一组接口,完成日志功能,通过包装其他日志工具或系统来工作commons-logging、Slf4j。
从历史上看,Log4j出现最早,它实现了日志的记录,格式和级别的划分,以及配置简单的特点把Java的日志框架推到了一个新的高度,使得开发人员彻底抛弃System.out.println。
自JDK1.4开始,JDK提供了java.util.logging类库,提供了一个完整的日志框架,在设计上要比Log4j要更清晰。
此外同期还出现了一些其他的日志框架,功能大同小异,在重复发明轮子的同时还造就了日志框架的概念模糊和使用混乱。在这样的背景下,一个基于Apache的commons-logging日志框架产生了。commons-logging不提倡重复发明轮子,它本身不提供任何日志方面的功能,只是对现有的主流日志框架(Log4j、JDK Logger、Simplelog等)进行包装,提供日志统一的接口。这样,开发的时候,只需要使用commons-logging,通过配置,灵活选择底层实现。
Log4j经过多年的发展和应用,不断完善和加强,增加了热部署、异步批量把日志写入数据库等功能。在Log4j看起来越来越强大时,内部却充满了代码的坏味道。就连它的作者也认为应该有一个更好的日志框架。于是再次操刀创建了slf4j来取代commons-logging,创建了Logback来取代Log4j。目前,Log4j和JDK Logger应用最为广泛,slf4j作为新兴的抽象层,整合Logback,以其简洁,快速,正被越来越多的顶级项目使用。如Hibernate,Jetty。
2 代表日志组件简要介绍
Log4j:历史悠久,应用广泛,被移植到多种语言及平台,功能强大,在众多的日志框架中,仍占据着主导地位。
JDK Logger:JDK提供的日志框架,设计精良,和JDK紧密结合,控制灵活,使用简单。 commons-logging:提供了日志的抽象层,可以整合多种实现,但有classloader问题。
Slf4j:提供了jcl的超集,避免了classloader问题,逐步取代commons-logging
Logback:可靠,通用,快速,灵活的java日志工具,逐步取代Log4j。
3 项目选择思考
■ 单一的项目,如桌面应用,采用JDK Logger,免配置,控制灵活。
■ Web开发,采用log4j,因为系统已经有了很多的配置文件,不在乎多一个,而且log4j可以脱离任何组件,不像jul,和jvm紧密结合在一起。
■ 新项目、多项目整合开发,采用slf4j,一是它可以整合其他遗留日志组件,二是其提供的抽象层,为将来的开发提供了灵活性。而且slf4j文档和支持都很完善,性能更好。
4 参考资料
■ IBM developerworks对log4j的介绍。 http://www.ibm.com/developerworks/cn/java/l-log4j/index.html
■ Java开源日志组件列表。http://www.open-open.com/open50229.htm
■ Slf4j官方网站。http://www.slf4j.org/ ■ Logback官方网站。http://logback.qos.ch/ ■ Log4j官方网站。http://logging.apache.org/
■ commons-logging官方网站。http://commons.apache.org/logging/