日志框架主要分为两类
- 日志门面:jcl、slf4j、jboss-logging
- 日志实现:log4j、log4j2、logback、jul
log4j是apache的一个开源项目
logback是一个成熟的框架,由log4j的作者写成,logback分成三个模块:
- logback-core是其他两个模块的基础模块
- logback-classic是log4j的一个改良版本,logback-classic完整实现slf4j api使你可以很方便的更换成其他日志系统如log4j或jul
- logback-access访问模块与servlet容器集成提供通过http来访问日志的功能
log4j2已经不仅仅是log4j的一个升级版本了,而是从头到尾被重写的,可以认为这其实是两个完全不同的框架
jul是java.util.logging包的简称
日志门面是门面模式的一个典型的应用
门面模式(Facade Pattern),也称之为外观模式,其核心为:外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用
日志实现就是对接口的实现
不建议直接使用日志系统(log4j、logback)中的api,而应依赖使用日志框架slf4j中的api,使用门面模式中的日志框架,有利于维护和各个类的日志处理方式统一
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);
比如,一开始项目用的是log4j的实现,后来发现log4j的性能太差了,想换成logback,由于我们代码中都是面向slf4j接口的,这样我们只要吧log4j的依赖换成logback就可以了
slf4j即java简易日志门面(Simple Logging Facade for Java),目前主要支持jul、log4j、logback等框架,其作者就是log4j和logback的作者,他宣称slf4j比log4j更有效率,比jcl(Apache Commons Logging)简单、稳定,更常用
log4j提供trace, debug, info, warn, error, fatal六种日志级别,但是slf4j认为error和fatal并没有实质上的区别,所以拿掉了fatal级别,只剩下其他五种,在org.slf4j.event包下的Level枚举类中可以看到
commons-logging:Apache Commons Logging是一个基于java的日志记录使用程序,用于日志记录和其他工具的编程模型,和slf4j功能类似