Spring Boot 默认使用 Logback 日志框架,当启动服务的时候或者使用 @Slf4j 手动打印日志的时候,可以看到控制台有日志打印:
这是默认的格式,然而我们可以手动配置,自定义格式,还可以将日志保持到文件中。
最小配置
无需新增任何依赖,只要在 resource 目录下新建日志配置文件 logback-spring.xml 文件即可,服务启动的时候,springboot 会自动加载该文件,无需手动配置加载启动。
下面展示一个最小的配置:
<configuration>
<!-- 定义 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 最简单的格式:时间 [线程] 级别 类名 - 消息 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 根日志级别 -->
<root level="INFO">
<!-- 使用上面定义的 CONSOLE 输出-->
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
解读一下上面的配置:
1、首先定义了一个日志输出,名称叫做 CONSOLE, 采用 ConsoleAppender 输出,意思是输出到控制台。下面将该 CONSOLE 挂到根日志器上,告诉 logback:所有日志最终都交给名叫 CONSOLE 的那个 appender 输出。
2、然后 CONSOLE 里面又定义了日志的输出格式,其中也引用了内置的一些占位符:
| 占位符 | 含义 | 说明 |
|---|---|---|
| %d{yyyy-MM-dd HH:mm:ss.SSS} | 日期时间 | |
| %thread | 线程名称 | |
| %-5level | 日志级别 | -表示左对齐,5 表示占5个字符宽度 |
| %logger{36} | Logger名称(通常是类名) | 26表示最长打印36个字符,超过会被截断 |
| %msg | 日志消息体 | |
| %n | 换行符 | windows 是\r\n |
3、最后根日志器又声明了打印的日志级别,只有 INFO 和 INFO 之上的才会被打印。
日志级别一共有:
TRACE < DEBUG < INFO < WARN < ERROR
最后打印效果如下:
添加颜色
打印到控制台添加颜色才有意义,如果打印到文件中,没必要加颜色。
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 添加颜色 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
%highlight 加在 日志级别上,不同的级别,会打印不同的颜色。
最后打印效果如下:(还可以调整对其方式)
打印到文件中
声明日志文件打印,最后根日志器设置控制台和文件都启用。
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 添加颜色 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n</pattern>
</encoder>
</appender>
<!-- 文件(按天滚动,最多保留 30 天,单个文件 100 MB) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式:app-2024-07-31.0.log.gz -->
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 单个文件最大 100 MB -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 日志保留 30 天 -->
<maxHistory>30</maxHistory>
<!-- 磁盘总量上限(可选) -->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<!-- 文件不需要彩色 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
效果: