目录
SLF4J与其它日志组件调用关系图
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。
SLF4J最常用的日志实现框架是:log4j、logback。一般有slf4j+log4j、slf4j+log4j2、slf4j+logback三种日志组合。本文选取logback做具体介绍。
概述
Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为以下三个模块:
- logback-core:其它两个模块的基础模块。
- logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
- logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能。
默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。
日志级别(log level):用来控制日志信息的输出,从高到低分为共分为七个等级:
A:off 最高等级,用于关闭所有日志记录。
B:fatal 指出每个严重的错误事件将会导致应用程序的退出。
C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm 表明会出现潜在的错误情形。
E:info 一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all 最低等级,用于打开所有日志记录。
logback和log4j是同一个作者,logback可以看作是log4j的升级版。
Logback相比log4j的优势,
比log4j更快,重写了内核,在一些关键路径上性能提升10倍,内存占用也更少。经过大量的测试,和log4j测试不在一个量级。
logback-classic是SLF4J的实现,切换其他日志框架非常方便,文档丰富并且不断更新,支持Groovy风格的配置文件配置文件自动重新加载,如果更新了配置文件,logback-classic可以自动重新加载。
自动删除日期较老的日志文件,maxHistory属性,你可以控制已经产生日志文件的最大数量。如果设置maxHistory为12,那那些log文件超过12个月的都会被自动移除。自动压缩归档的日志文件,压缩文件是异步进行,不影响应用。
配置文件可以处理不同的环境开发,测试,生产),这样一个配置文件就可以适应多个环境。SiftingAppender(一个非常多功能的Appender) 它可以用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender能够区别日志事件跟进用户的Session,然后每个用户会有一个日志文件。Logback的简单应用,
Logback的配置
pom依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--引入以上依赖,会自动引入以下jar
logback-classic.x.x.x.jar
logback-core.x.x.x.jar
slf4j-api-x.x.x.jar
-->
注意spring-boot-starter-parent里已集成logback,可直接使用。
logback.xml
配置加载的顺序,上下文初始化的时候会调用ContextInitializer,在这个类中的方法findURLOfDefaultConfigurationFile是用来加载默认的配置文件,
在工程resources目录下建立logback.xml
1.logback首先会试着查找logback.groovy文件;
2.当没有找到时,继续试着查找logback-test.xml文件;
3.当没有找到时,继续试着查找logback.xml文件;
4.如果仍然没有找到,则使用默认配置(打印到控制台)。
logback的配置文件
1、最简单的使用就是不使用任何配置文件,用默认的Console输出日志,
2、使用logback.xml配置文件
最基本的配置是一个configuration里面有零个或多个appender,零个或多个logger和最多一个root标签组成。(logback是对大小写敏感的)
configuration是根标签,有三个属性debug,scan和scanPeriod,debug=true时会打印出logback内部的状态,scan=true表示如果配置修改了,会重新加载模式为true,scanPeriod为扫描时间间隔。
logger标签用来设置某一个包或具体的某一个类的日志输出,有个level属性,用来设置日志级别,可选值为TRACE,DEBUG,INFO,WARN, ERROR, ALL 和 OFF。logger标签可以包括零个或者多个appender-ref标签。root标签配置root logger,这个标签和logger一样有个level,也有零个或者多个appender-ref标签。
Appender标签,负责写日志的组件,有两个必要属性name和class,name指定appender名称,class指定appender的全限定名。这个Appender可以有零个或者多个layout,encoder和filter标签。appender的class 类型主要有三种:ConsoleAppender、FileAppender、RollingFileAppender。
root 也是logger元素,但是它是根logger。只有一个level属性,因为已经被命名为"root".
level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。
root可以包含零个或多个appender-ref元素,标识这个appender将会添加到这个logger。