Logback是由log4j创始人设计的又一个开源日志组件。
Logback当前分成三个模块:
1、logback-core,
2、logback- classic
3、logback-access。1)logback-core是其它两个模块的基础模块。
2)logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API。使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
3)logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
ch.qos.logback
logback-classic
1.2.3
SpringBoot项目默认就是使用的就是logback日志系统,创建SpringBoot项目时引入的spring-boot-starter或者spring-boot-starter-web依赖jar包中已经包含了spring-boot-starter-logging的依赖,里面同时包含多种日志系统依赖,如下图所示:
包括logback和log4j,所以,无需额外添加依赖,直接配置logback.xml就可以了。
此外,如果需要切换为log4j2,那么需要在spring-boot-starter-web依赖中排除springboot自带的commons‐logging,然后在引入log4j2的依赖jar包,如下所示:
org.springframework.boot
spring-boot-starter-web
commons‐logging
commons‐logging
org.springframework.boot
spring-boot-starter-log4j2
1、Logger: 日志的记录器,主要用于存放日志对象,也可以定义日志类型、级别。
2、Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
3、Layout: 负责把事件转换成字符串,格式化的日志信息的输出。在Logback中Layout对象被封装在encoder中。也就是说我们使用的encoder其实就是Layout。
与前几个日志框架类似!
用来控制日志信息的输出,从高到低分为共分为七个等级:
A:off 最高等级,用于关闭所有日志记录。
B:fatal 指出每个严重的错误事件将会导致应用程序的退出。
C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm 表明会出现潜在的错误情形。
E:info 一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all 最低等级,用于打开所有日志记录。
Logback提供了3种配置文件
配置文件下面会详解。
每一个logger都被关联到一个loggerContext中,loggerContext负责生产logger,也负责以树形结构排列各个logger。
logger的获取主要是通过org.slf4j.LoggerFactory的getLogger()方法获取。
getLogger()方法有两种实现方式
a) getLogger(Class Obj)通过传入一个类的形式,来进行logger对象和类的绑定。
b) getLogger(String name)方式是通过传入一个contextName的形式,来指定一个logger。
其中,用同一个名字调用该方法获取的永远都是同一个logger对象。
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(LogDemo.class);
logger.trace("======trace");
logger.debug("======debug");
logger.info("======info");
logger.warn("======warn");
logger.error("======error");
}
没有加任何配置,会使用默认配置,但是记得要引入SpringBoot的依赖包。
下面是一个比较完整的示例,那这个介绍一下各个标签的含义:
${PATTERN}
UTF-8
${OPEN_FILE_PATH}/all/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log
${EXIST_TIME}
${MAX_FILE_SIZE}
${PATTERN}
${OPEN_FILE_PATH}/debug/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log
30
${MAX_FILE_SIZE}
true
%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
utf-8
DEBUG
ACCEPT
DENY
${OPEN_FILE_PATH}/info/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log
30
${MAX_FILE_SIZE}
true
%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
utf-8
INFO
ACCEPT
DENY
${OPEN_FILE_PATH}/error/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log
30
${MAX_FILE_SIZE}
true
%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
utf-8
ERROR
ACCEPT
DENY
${OPEN_FILE_PATH}/warn/${FILE_PREFIX}_%d{yyyy-MM-dd}-%i.log
30
${MAX_FILE_SIZE}
true
%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
utf-8
WARN
ACCEPT
DENY
1.logback-spring.xml的配置项
共有一个父标签、两种属性、三个节点:
一个父标签:configuration
两种属性:contextName和property
三个节点:appender、root、logger
2.父标签 configuration:
三个属性:
1、scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
2、scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
3、debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
3.子节点:
logback
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用
4.属性标签property
用来定义变量值的标签,它有两个属性 name 和 value:
这个标签就是可以把通用的属性设置好,如果后面有需要用到的地方可以直接引用。
5.子节点:
${PATTERN}
UTF-8
appender用来格式化日志输出节点,有连个属性name和class,class用来指定那种输出策略。
appender跟前几个框架中的用法类似,其实可以认为是一个输出器,指定输出的名字和样式,如果检测到配置文件中有这个输出器,就会按照输出器配置的格式输出。
输出策略:
1、ConsoleAppender:日志输出到控制台,类名ch.qos.logback.core.ConsoleAppender。
2、FileAppender:日志输入到文件,类名ch.qos.logback.core.FileAppender。作用是将日志输出到文件。目标文件可以指定,如果该文件已经存在,它将根据附加属性的值被追加或截断。
3、RollingFileAppender:滚动记录文件,FileAppender的子类,当符合条件(大小、时间),日志进行切分处理,类名:ch.qos.logback.core.rolling.RollingFileAppender。将FileAppender的功能进行扩展,提供了切割日志文件的功能。例如:RollingFileAppender可以记录日志到一个名为log.txt的文件,一旦满足一定条件,将其日志目标更改为另一个文件。在使用时,RollingFileAppender必须同时具有RollingPolicy和TriggeringPolicy设置。但是,如果它的RollingPolicy也实现TriggeringPolicy接口,那么只需要显式地指定前者。
4、TimeBasedRollingPolicy:时间基准滚动策略可能是最流行的滚动策略。它定义了一个基于时间的滚动策略,例如每日或每月。时间的滚动策略承担了翻转的责任,同时也承担了触发的滚动。TimeBasedTriggeringPolicy实现了RollingPolicy和TriggeringPolicy接口。类名ch.qos.logback.core.rolling.TimeBasedRollingPolicy
5、SizeAndTimeBasedRollingPolicy:有时候可能希望按日期对文件进行存档,但同时限制每人日志文件的大小,这时候可以使用SizeAndTimeBasedRollingPolicy达到目的。类名ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy
6、SiftingAppender:筛选附加器,类名ch.qos.logback.classic.sift.SiftingAppender ,他下面有个子节点