logback简介
logback是由log4j的创始人开发的新日志框架,包括三个模块:
- logback-core
- logback-classic
- logback-access
logback-core是核心模块,logback-classic是日志框架,相当于log4j,logback很好的实现了slf4j,logback-access提供跟web 容器有关的日志访问功能。
logback与log4j的区别
logback和Log4j是同一个开发者,与log4j相比,logback有如下优势:
- 更高的性能,性能提高几十倍
- 更完善的文档
- 更完善的功能测试
- 提供热加载机制
- 对slf4j有更直接的实现,不像Log4j还需要转换器
- 可以生成日志归档文件
- 可以通过配置文件设置自动删除归档文件
简单实例
想要使用logback非常简单方便,只需要使用slf4j-api,logback-core,logback-classic 三个包,maven文件做如下配置:
<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.0.11</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.11</version>
</dependency>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogBackDemo {
private static final Logger logger = LoggerFactory.getLogger(LogBackDemo.class);
public static void main(String[] args) {
logger.info("Hello word!");
}
我们在代码中直接使用slf4j的接口,没有显示的引用任何logback相关的代码,完成了logback的调用,我们只需要在getLogger参数中传入当前类的全限定类名,是不是非常简单啊?
logback配置介绍
- Logger、appender及layout
logback可以在配置文件配置具体的参数,配置文件主要由Logger、appender及layout等配置组成。
logger主要是日志记录器,通过Logcontext进行管理,存放logger对象。
appender设置日志输出的目的地,可以输出到控制台、文件、数据库等目标。
layout 用来指定日志输出的字符串格式。
- logger context
logcontext负责管理logger,logger由logcontext创建,并由logcontext管理logger对象的树状关系,logger对象通过org.slf4j.LoggerFactory 类的静态方法getLogger取得 ,getlogger以当前类的全限定名作为参数传入,如果参数相同,通过该方法永远获得同一个对象。
- 级别的继承
每一个logger对象可以设定日志的输出级别,日志级别由高到低分为TRACE、DEBUG、INFO、WARN 和 ERROR ,如果当前logger没有设置级别,获取上层对象的日志级别作为logger的日志级别。
- 日志的打印规则
例如我们做logger.info(“Hello word!”);的日志输出,info是当前日志请求的级别,该请求级别需要大于等于logger对象设置的日志级别才能启用该日志输出,否则不能输出,级别顺序为
TRACE < DEBUG < INFO < WARN < ERROR 。
logback.xml配置详解
配置结构如下:
- 根节点configuration
节点包含三个属性:
scan 设置为ytrue,修改配置文件可以自动重新加载。
scanPeriod 为监控配置文件是否修改的时间间隔。
debug 为true时候打印logback内部信息。
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--其他配置省略-->
</configuration>
- ConsoleAppender
把日志输出到控制台
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
encoder对日志信息格式化。
- FileAppender
把日志输出到文件。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
file:被写入的文件名。
append:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。 :对记录事件进行格式化。
- RollingFileAppender
滚动记录日志,先把日志记录到一个指定文件,在指定条件下再归档到其他文件。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
file:被写入的文件名。
append:如果是 true,日志被追加到文件结尾,如果是 false。
rollingPolicy:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。
TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略。
fileNamePattern:包含文件名及“%d”转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。 如果直接使用 %d,默认格式是 yyyy-MM-dd。
maxHistory: 控制保留的归档文件的最大数量,超出数量就删除旧文件。