SpringBoot是使用common logging来集成日志的,但是底层的实现方式是开放的。默认提供了Java Util Logging,Log4J2 和Logback 3种方式,每一种方式都提供了控制台输出和文件输出方式。
如果项目中通过maven引入了spring-boot-starter的jar或引入spring-boot-starter-web的jar,那么项目中默认引入了spring-boot-starter-logging的jar,该jar提供了用logback的记录日志方式,默认的logback配置文件是base.xml,使用的框架是slf4j的日志架构,如果需要使用其他的日志框架,配置如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
在这里主要介绍的是logback的配置说明,配置logback.xml可以直接放在resources文件夹下面或者在resources文件夹下新增一个文件夹如logback文件夹,把logback.xml文件放到该文件夹下,在application.properties配置文件中引入该logback.xml文件,引入方式为
logging.config=classpath:/logback/logback.xml
以下是一些常用的日子配置参数说明:
1.configuration是其他节点的根节点,写在最外面,该参数有以下属性:
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
2.property节点是用来定义全局变量的,用此参数来定义的变量可以使用${xx}来引用,该参数有2个属性:
name:设置变量名称。
value:设置变量的值。
3.appender节点用来定义需要输出的日志组件,该参数有2个属性:
name:指定appender的名称。
class:指定appender的全限定名,该属性比较常使用的是ConsoleAppender、FileAppender、RollingFileAppender、AsyncAppender等4个类,下面主要介绍下这4个类的配置说明。
3.1.ConsoleAppender
该类用于控制台日志的打印,有以下子节点:
3.1.1.encoder
用于对日志进行格式化。该节点下面有一个pattern节点,主要用于配置日志格式,日志格式样式如:%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{36} - %msg%n
具体参数说明如下:
%d{yyyy-MM-dd HH:mm:ss.SSS}——日志输出时间,可以定义为如%d{HH:mm:ss.SSS}的样式
%-4relative 输出从程序启动到创建日志记录的时间,单位是毫秒,进行左对齐 且最小宽度为4。
%thread——输出日志的进程名字。
%-5level——日志级别,并且使用5个字符靠左对齐。
%logger{36}——日志输出者的名字,名字长度从右到左为36个长度,大于36个长度的字符不显示,长度可以随便设置,为0表示只输入logger最右边点符号之后的字符串。
%msg——日志消息。
%n——平台的换行符。
3.1.2.target
字符串 System.out 或者 System.err ,默认 System.out。
3.2.FileAppender
该类用于文件日志的输出打印,有以下子节点:
3.2.1.file
用于定义日志文件的输出路径及名称。
3.2.2.append
是否添加到末尾,如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
3.2.3.encoder
用于对日志进行格式化输出,参考3.1.1。
3.2.4.prudent
如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。
3.3.RollingFileAppender
滚动输出日志记录。有以下子节点:
3.3.1.file
用于定义日志首先输出的文件路径,当满足给定条件的时候将会把日志记录到其他指定的文件中。
3.3.2.rollingPolicy
日志滚动策略。只有一个class属性,用于指定日志使用的滚动策略,日志的滚动策略主要有2种分别是TimeBasedRollingPolicy和FixedWindowRollingPolicy。
3.3.2.1.TimeBasedRollingPolicy
这个是最常用的日志滚动方式,每天生成一个或多个日志文件,使用该滚动方式的时候,可以不需要file子节点。该节点下面有以下子节点:
3.3.2.1.1.fileNamePattern
该节点用于生成日志文件名称的匹配格式,在没有定义日志文件大小的时候日志文件的名称格式如logFile.%d{yyyy-MM-dd}.log,在定义了日志文件大小的时候日志文件的名称格式必须是如下格式logFile.%d{yyyy-MM-dd}-%i.log,不然启动的时候会报错。可以设置为压缩格式,支持zip,gz这2种格式,如logFile.%d{yyyy-MM-dd}-%i.log.zip。
3.3.2.1.2.maxHistory
日志最大的保留时间,值为整数。当文件的生成格式为logFile.%d{yyyy-MM-dd}.log时,表示是以天为时间间隔的,那么该子节点所填充的值就表示日志文件的保留天数,如30,表示最早生成的日志文件保留的天数为30天,30天过后日志文件都会被删除;如果文件的生成格式为logFile.%d{yyyy-MM }.log时,表示日志文件是按照月份来生成的,当把值设置为5的时候,表示最早的日志文件只能保存5个月,5个月过后生成的日志文件都会被删除。
3.3.2.1.3.timeBasedFileNamingAndTriggeringPolicy
用于定义日志文件的大小。有1个子节点maxFileSize用于定义日志文件的大小。当日志文件的大小超过定义的最大值的时候就会生成新的日志文件。该子节点被定义的时候fileNamePattern定义的生成文件名称必须是如logFile.%d{yyyy-MM-dd}-%i.log这样的文件格式,否则启动报错。
3.3.2.2.FixedWindowRollingPolicy
根据固定窗口文件大小算法生成日志文件的滚动策略。该节点有以下子节点:
3.3.2.2.1. fileNamePattern
该节点用于生成日志文件名称的匹配格式,日志文件的名称格式必须是如下格式logFile.%i.log。可以设置为压缩格式,支持zip,gz这2种格式,如logFile.%i.log.zip。
3.3.2.2.2.minIndex
该节点用于表示%i的起始标号。
3.3.2.2.3.maxIndex
该节点用于表示%i的最终标号。
3.3.2-1.triggeringPolicy
该节点有1个属性class,使用SizeBasedTriggeringPolicy类来定义文件的大小,配合FixedWindowRollingPolicy使用,该节点的根节点是appendeer。
3.3.3.append
是否添加到末尾,说明参考3.2.2
3.3.4.encoder
用于对日志进行格式化输出,参考3.1.1。
3.3.5.filter
过滤器,用来过滤满足条件的日志输出,有1个class属性。使用较多的有2种过滤器,分别是级别过滤器LevelFilter和临界值过滤器ThresholdFilter。
3.3.5.1. LevelFilter
过滤的级别,过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。
返回DENY,日志将立即被抛弃不再经过其他过滤器;
返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;
返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。
有以下子节点:
3.3.5.1.1.level
该节点表示过滤的级别。
3.3.5.1.2.onMatch
表示匹配后的操作,值由DENY,NEUTRAL,ACCEPT。
3.3.5.1.3.onMismatch
表示不匹配后的操作,值由DENY,NEUTRAL,ACCEPT。
3.3.5.2. ThresholdFilter
临界值过滤器,过滤掉低于指定临界值的日志;
当日志级别等于或高于临界值时,过滤器返回NEUTRAL;
当日志级别低于临界值时,日志会被拒绝。
有1个子节点:
3.3.5.2.1.level
该节点表示过滤的级别。
3.4.AsyncAppender
异步输出日志。有以下子节点:
3.4.1.discardingThreshold
该节点用于不丢失日志。在默认的情况,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的event日志,只保留WARN和ERROR级别的event,为了保持所有的events,设置该值为0。
3.4.2.queueSize
该节点的值影响性能,默认值为256。
3.4.3.appender-ref
该节点用于引入需要异步输出的appender。
4.logger
该节点用于定义具体的包路径下的所有类或某一个指定的类的具体日志级别。有3个属性分别为name、level和addtivity:
name为指定的包或类路径。
level为指定的包或类的日志输出级别,如果没有设置日志级别将会继承root的日志级别。
addtivity为是否向上级logger传递打印信息,默认是true。
有以下子节点:
4.1.appender-ref
该节点用于引入需要使用相关appender的输出方式,可以有0—n个该节点。
5.root
该节点用来设置appender-ref涉及的名称的日志级别。只有1个属性level用来表示日志的输出级别,大小写无关,TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。只有1个appender-ref子节点,该节点可有0—n个,用于引入相关的日志输出方式。