默认情况下 Spring Boot 框架使用 Logback 记录日志。
- 在 application.yml 文件中配置 Logback 配置文件位置:
logging:
config: classpath:log/logback-${spring.profiles.active}.xml
- Logback 日志配置文件 —— logback-dev.xml
- 控制台彩色日志输出
- 同时将日志输出到控制台和文件,日志文件保留15天,单个日志文件最大 5M,所有日志文件最大 200M
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%black(%contextName) %red(%d{yyyy-MM-dd HH:mm:ss}) %yellow(%X{trackId}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!-- 生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<fileNamePattern>log/jasmine.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
<!-- 单个文件最大大小 -->
<maxFileSize>5MB</maxFileSize>
<!-- 所有日志文件总共的大小 -->
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
pattern 标签说明:
-
%d
:日志输出时间; -
%thread
:日志的进程名字; -
%-5level
:日志级别,并且使用5个字符靠左对齐; -
%logger{80}
:日志输出者的名字; -
%msg
:日志信息; -
%n
:平台的换行符。
控制台日志输出效果截图:
PicGoimage-20220617133326073.png
logback 彩色日志支持的颜色:
// ch.qos.logback.classic.PatternLayout
DEFAULT_CONVERTER_MAP.put("black", BlackCompositeConverter.class.getName()); // 黑色
DEFAULT_CONVERTER_MAP.put("red", RedCompositeConverter.class.getName()); // 红色
DEFAULT_CONVERTER_MAP.put("green", GreenCompositeConverter.class.getName()); // 绿色
DEFAULT_CONVERTER_MAP.put("yellow", YellowCompositeConverter.class.getName()); // 黄色
DEFAULT_CONVERTER_MAP.put("blue", BlueCompositeConverter.class.getName()); // 蓝色
DEFAULT_CONVERTER_MAP.put("magenta", MagentaCompositeConverter.class.getName()); // 品红色
DEFAULT_CONVERTER_MAP.put("cyan", CyanCompositeConverter.class.getName()); // 青色
DEFAULT_CONVERTER_MAP.put("white", WhiteCompositeConverter.class.getName()); // 白色
DEFAULT_CONVERTER_MAP.put("gray", GrayCompositeConverter.class.getName()); // 灰色
DEFAULT_CONVERTER_MAP.put("boldRed", BoldRedCompositeConverter.class.getName()); // 红色(加粗)
DEFAULT_CONVERTER_MAP.put("boldGreen", BoldGreenCompositeConverter.class.getName()); // 绿色(加粗)
DEFAULT_CONVERTER_MAP.put("boldYellow", BoldYellowCompositeConverter.class.getName()); // 黄色(加粗)
DEFAULT_CONVERTER_MAP.put("boldBlue", BoldBlueCompositeConverter.class.getName()); // 蓝色(加粗)
DEFAULT_CONVERTER_MAP.put("boldMagenta", BoldMagentaCompositeConverter.class.getName()); // 品红色(加粗)
DEFAULT_CONVERTER_MAP.put("boldCyan", BoldCyanCompositeConverter.class.getName()); // 青色(加粗)
DEFAULT_CONVERTER_MAP.put("boldWhite", BoldWhiteCompositeConverter.class.getName()); // 白色(加粗)
DEFAULT_CONVERTER_MAP.put("highlight", HighlightingCompositeConverter.class.getName()); // 高亮