logback 是 SpringBoot 默认集成的日志框架之一,性能非常好且易于配置,因此被 SpringBoot 采用作为默认的日志框架。
- 本文所有信息基于作者实践验证,如有错误,恳请指正,不胜感谢。
- 转载请于文首标明出处:【SpringBoot】logback 日志配置
- 文章仍未完工,内容会逐步完善
相关资料
官方
- Logback Home (qos.ch)
- Chapter 6: Layouts (qos.ch)
- Apache Commons Logging - Overview
- Spring Boot Reference Guide [2.0.1] - Logging
- Spring Boot Features [Current Release] - Logging
其他
SpringBoot 默认配置
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
从依赖树上可以看到,spring-boot-starter
已经引入了 spring-boot-start-loggin
。而 spring-boot-starter
又被 spring-boot-starter-web
包含,因此标准的 SpringBoot 程序都会默认引入 logback。
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ spring-boot-start-web ---
[INFO] org.springframework.boot:spring-boot-starter-web:jar:2.5.4:compile
[INFO] +- org.springframework.boot:spring-boot-starter:jar:2.5.4:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-logging:jar:2.5.4:compile
[INFO] | | +- ch.qos.logback:logback-classic:jar:1.2.5:compile
[INFO] | | | \- ch.qos.logback:logback-core:jar:1.2.5:compile
[INFO] | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.14.1:compile
[INFO] | | | \- org.apache.logging.log4j:log4j-api:jar:2.14.1:compile
[INFO] | | \- org.slf4j:jul-to-slf4j:jar:1.7.32:compile
默认配置
SpringBoot 默认输出的控制台格式已经非常美观实用了,其默认的 logback 配置路径在:org/springframework/boot/logging/logback
文件夹中,拆分成 4 个部分。
-
base.xml
Base 文件,引入
default.xml
配置,同时设置使用CONSOLE
和INFO
作为INFO
级别的输出节点,这两个节点分别定义在其他两个文件中。配置文件通过
include
插入的地方就是<include>
标签的位置。<?xml version="1.0" encoding="UTF-8"?> <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>
-
console-appender.xml
控制台输出节点的定义,使用
default.xml
中已定义好的变量进行配置。<?xml version="1.0" encoding="UTF-8"?> <included> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>${CONSOLE_LOG_CHARSET}</charset> </encoder> </appender> </included>
-
file-appender.xml
文件输出节点的定义,使用
default.xml
中已定义好的变量进行配置。<?xml version="1.0" encoding="UTF-8"?> <included> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> <charset>${FILE_LOG_CHARSET}</charset> </encoder> <file>${LOG_FILE}</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern> <cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart> <maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize> <totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap> <maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-7}</maxHistory> </rollingPolicy> </appender> </included>
-
defaults.xml
核心配置,定义了解析器、日志格式、字符集和关键 logger。
<?xml version="1.0" encoding="UTF-8"?> <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="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-default}"/> <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}}"/> <property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-default}"/> <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"/> <logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/> </included>
Logback 使用方法
To be continue...