1.日志框架
典型的日志管理框架如下图所示:
分为三层,服务层直接调用日志接口层,获取Logger,然后通过Logger对日志进行输出,日志的输出由具体的日志框架来实现。
日志接口层采用“外观模式(Facade)”来设计,可以不关心具体的日志框架实现,只提供一个日志标准。
2.Commons-logging
Apache提供的公共库,从2014年7月发布1.2版本以来,就不再更新了。
Commons Logging的特色是,它可以挂接不同的日志系统,并通过配置文件指定挂接的日志系统。默认情况下,Commons Loggin自动搜索并使用Log4j(Log4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging。
2.1.实践
首先,需要添加依赖。
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
然后,创建Log对象,并对日志进行输出。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Log log = LogFactory.getLog(Main.class);
log.info("start...");
log.warn(“end.");
当前已不推荐使用此日志接口。
3.Slf4j
SLF4J的全称为“The Simple Logging Facade for Java”。
在1.7.x版本之前,slf4j使用静态绑定的方式来管理LoggerFactory。主要是org.slf4j.impl.StaticLoggerBinder,这个类实现自org.slf4j.spi.LoggerFactoryBinder接口。
The binding of LoggerFactory class with an actual instance of ILoggerFactory is performed using information returned by this class。
典型实现接口有org.slf4j.impl.StaticLoggerBinder和ch.qos.logback.classic.util.ContextSelectorStaticBinder。
在1.8.x版本开始,使用Provider来实现对LoggerFactory的管理,实现接口为org.slf4j.spi.SLF4JServiceProvider,具体的实现类在各个日志框架中不同,
It replaces the old static-binding mechanism used in SLF4J versions 1.0.x to 1.7.x.
slf4j定义了LoggerFactory,通过LoggerFactory来获取Logger。
Logger logger = LoggerFactory.getLogger(Object.class);
org.slf4j.ILoggerFactory只是一个接口,各个日志框架需有其对应的实现类:
(1)ch.qos.logback.classic.LoggerContext
(2)org.slf4j.simple.SimpleLoggerFactory
4.日志框架实现
常用的日志框架实现有Slf4j-simple、Log4j、Log4j2、Logback,对于这几个框架,我们会在以后的文章中进行讲解。