-
logging.file.path
将日志输出到指定目录,如果不指定logging.file.name
,日志文件的默认名称是spring.log。配置了logging.file.name
之后,logging.file.path
配置失效。 -
无论何种设置,Spring Boot都会自动按天分割日志文件,也就是说每天都会自动生成一个新的log文件,而之前的会自动打成GZ压缩包。
# 日志文件大小
-
可以设置
logging.file.max-size=10MB
分割的每个日志的文件最大容量,超过这个size之后日志继续分隔。 -
可以设置保留的日志时间
logging.file.max-history=10
,以天为单位 -
logging.pattern.file
输出到文件中的日志的格式 -
logging.pattern.console
控制台输出日志的格式,为了在控制台调试时候显示效果更清晰,为日志增加了颜色。red、green等等
日志格式占位符
配合这张图,看一下占位符和logging.pattern.console
格式配置之间的关系
-
%d{HH:mm:ss.SSS}:日志输出时间(red)
-
%thread:输出日志的进程名字,这在Web应用以及异步任务处理中很有用 (green)
-
%-5level:日志级别,并且使用5个字符靠左对齐 (highlight高亮蓝色)
-
%logger:日志输出类的名字 (boldMagenta粗体洋红色)
-
%msg:日志消息 (cyan蓝绿色)
-
%n:平台的换行符
2.1.需求
一般情况下,使用全局配置文件application.yml或properties进行配置就足够了,如果您的日志输出需求特别复杂,可以考虑使用logback-spring.xml的配置方式。
spring boot 用自带的logback打印日志,多环境打印:
-
生产环境输出到控制台和文件,一天一个文件,保留30天.
-
开发环境输出到控制台和打印sql(mybatis)输出,生产环境不打印这个信息
-
测试环境只输出到控制台。不输出到文件
打印Mybatis SQL,只需要把使用到Mybatis的package的日志级别调整为DEBUG,就可以将SQL打印出来。
2.2.需求实现
因为logback是spring boot的默认日志框架,所以不需要引入maven依赖,直接上logback-spring.xml放在resources下面
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--引入默认的一些设置-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--web信息-->
<logger name="org.springframework.web" level="info"/>
<!--写入日志到控制台的appender,用默认的,但是要去掉charset,否则windows下tomcat下乱码-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_PATH" value="D:/logs/boot-launch"/>
<!--写入日志到文件的appender-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,每天一个文件-->
<FileNamePattern>${LOG_PATH}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--异步写日志到文件-->
<appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>500</queueSize>
<appender-ref ref="FILE"/>
</appender>
<!--生产环境:打印控制台和输出到文件-->
<springProfile name="prod">
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="asyncFileAppender"/>
</root>
</springProfile>
<!--开发环境:打印控制台-->
<springProfile name="dev">
<!-- 打印sql -->
<logger name="com.zimug.boot.launch" level="DEBUG"/>
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
<!--测试环境:打印控制台-->
<springProfile name="test">
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
</configuration>
异步日志配置:
-
异步日志queueSize 默认值256,异步日志队列的容量。
-
discardingThreshold:当异步日志队列的剩余容量小于这个阈值,会丢弃TRACE, DEBUG or INFO级别的日志。如果不希望丢弃日志(即全量保存),那可以设置为0。但是当队列占满后,非阻塞的异步日志会变成阻塞的同步日志。所以在高并发低延迟要求的系统里面针对不重要的日志可以设置discardingThreshold丢弃策略,值大于0。
2.3.测试一下
上面配置完成之后,可以使用如下代码测试一下,是否满足了2.1节中提出的需求。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
public class LogTestController {
### 最后
给大家送一个小福利

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

j.LoggerFactory;
@RestController
public class LogTestController {
### 最后
给大家送一个小福利
[外链图片转存中...(img-Qz0rfv4J-1718867991260)]
附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。
[外链图片转存中...(img-ZX8BTNvd-1718867991261)]