日志管理框架


发布于 2016-03-05 / 37 阅读 / 0 评论 /
日志框架主要使用了装饰模式

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,对于这几个框架,我们会在以后的文章中进行讲解。