一、logback模块
logback大致可分为3个模块:logback-core、logback-classic和logback-access。
logback-core:是其他两个模块的基础,包含了核心元件的接口和实现。
logback-classic:实现了slf4j api,所以你可以在logback和slf4j其他的实现之间切换。
logback-access:提供了在web容器中http-access日志功能的实现。
从上述内容我们可以看出,一般应用我们需要添加如下依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
在logback中,我们需要理解的最重要的4个接口或类型就是Logger,Encoder,Layout和Appender。logback的Logger是一个实现类,放在classic包里,这个Logger类是slf4j的org.slf4j.Logger
接口的一个实现,Layout和Appender两个接口在core包里。
二、主要类型和接口
下面主要介绍类型的职责,详细在后续章节说明:
ch.qos.logback.classic.Logger
这个Logger类是slf4j的org.slf4j.Logger
接口的一个实现。他提供了我们在记录日志时候的入口。通过调用不同日志级别的同名方法,产生不同级别的日志事件。
下面是使用Logger时日志记录常用方法(每个级别还包含一系列重载方法,这里不做展示):
public void trace(String format);
public void debug(String msg);
public void info(String msg);
public void warn(String msg);
public void error(String msg);
ch.qos.logback.core.encoder.Encoder
Encoder负责将日志event转换为byte array,然后将byte array传输到OutputStream流中。
ch.qos.logback.core.Layout
Layout负责将日志event转换成string。
ch.qos.logback.core.Appender
官方文档的解释是:Logback delegates the task of writing a logging event to components called appenders。说实话我没看懂,XD。
其实理解Appender只需要理解他最重要的一个方法doAppend(E event)
。这个方法也是logback框架最重要的一个方法。E具体是什么类型在不同模块里有所不同,classic里他是继承ILoggingEvent接口的一个类型实例,在access模块里,他是AccessEvent类型的实例。doAppend方法干的事儿就是接收一个日志事件,然后让他以正确的格式向外输出给对应的设备。这就是Appender主要干的事儿。
我们在配置Appender的时候,常会看到子节点有filter,encoder,xxpolicy这些东西,appender会协调这些组件一起工作。