常用的日志类型有:Java Util Logging,commons logging,Log4j和slf4jspringboot三种日志输出均支持,如果使用spring-boot-starter依赖的(一般都使用这个),均默认使用的为logback,又默认依赖slf4j作为日志输出。

默认日志Logback

    默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在新建的springboot项目或是开源项目运行时,就会看到日志输出:

    这就是springboot默认的日志输出,查看源码可知,默认配置为org/springframework/boot/logging/logback/base.xml的日志配置:

//base.xml
<included>
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
	<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
	<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
	<root level="INFO">
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="FILE" />
	</root>
</included>

// defaults.xml
<included>
   # 定义显示颜色
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    # 定义默认控制台输出日志输出格式
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    # 定义默认日志文件输出格式
    <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR" />
    <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR" />
    <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN" />
    <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN" />
    <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN" />
    <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR" />
    <logger name="org.hibernate.validator.internal.util.Version" level="WARN" />
</included>

//console-appender.xml
<included>
	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
	</appender>
</included>

//file-appender.xml
<included>
	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<encoder>
			<pattern>${FILE_LOG_PATTERN}</pattern>
		</encoder>
		<file>${LOG_FILE}</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
			<maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
			<maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory>
		</rollingPolicy>
	</appender>
</included>

    上述的配置要点:

        defaults.xml文件主要对一些变量做声明,并配置几个重要的类的日志输出,而base.xml则是通过root进行配置日志输出的方式有:控制台输出和日志文件输出,核心的一些配置在于日志输出格式(pattern),

        在defaults.xml中定义了默认的控制台输出的格式和文件日志输出格式(上面代码标黄处),在自定义输出格式可以参考其配置:

<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

       其中clr表示显示颜色设置(使用org.springframework.boot.logging.logback.ColorConverter类),官方文档给出目前支持的颜色有blue,cyan,faint,green,magenta,red,yellow,可以针对异常的日志做特殊的颜色输出配置。

添加日志依赖

spring-boot-starter中都包含了logging依赖,因此我们只需要有spring-boot-starter的依赖即可(如Thymeleaf,redis等)。

日志文件自定义配置

 在进行自定义日志配置前,需要先了解几个概念:

    日志输出级别

    SpringBoot支持6种日志级别(常用的只有四种),默认级别为INFO,比设置级别低的日志信息均不会输出,按优先级别排序如下:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL    

   可以设置级别为DEBUG来启用调试模式(通常开发时使用),正常程序运行的每条日志都会输出。

    日志输出方式

    默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件

  1.     控制台输出,只在控制台(console)中打印出日志。
  2.     文件输出,将输出的日志保存到文件中。通常会自定义配置日志输出的文件的保存路径,文件命名格式,日志格式等(更多时还需要区分日志级别,每天产生一个日志文件等)。

    如果要生成日志文件,需要在application.properties/yml文件中配置logging.file或logging.path等属性

logging.file    生成日志文件路径(可以相对路径或绝对路径)
logging.file.max-size    日志文件大小阈值,默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件
logging.path    生成日志文件目录
logging.pattern.console    配置控制台输出日志的格式
logging.pattern.dateformat    日期格式化
logging.pattern.file    文件格式
logging.pattern.level

使用logback-spring.xml配置(springprofile配置)

根节点<configuration>

子节点一:<springProfile>

子节点二:<Property>、<SpringProperty>

子节点三:<appender>

子节点四:<logger>

子节点五:<root>