目录
一 SpringBoot默认日志配置
SpringBoot为Java Util Logging,Log4J2和Logback提供了默认配置。SpringBoot默认配置日志输出到控制台,同时还提供可选文件输出。
SpringBoot默认采用SLF4j(日志抽象层)+ Logback(日志实现)的组合。
1.1 日志输出实战
- 新创建SpringBoot工程,起名为spring-boot-logging
先直接运行程序,看控制台的输出
可以看到,在不做任何配置的情况下,控制台已经有日志输出了。这也印证了我们前面所说的。
接下来在测试类中使用一下SpringBoot的日志:
package com.yky.springboot;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringBootLoggingApplicationTests {
private Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
logger.info("这是info级别的日志");
}
}
注:这里使用的Logger的全类名是org.slf4j.Logger
输出结果
1.2 控制台输出
通过上面的验证,可以得出结论:
SpringBoot的日志记录器,默认情况下在控制台输出以下项目:
- 日期和时间:毫秒精度,易于排序。
- 日志级别:ERROR,WARN,INFO,DEBUG,或TRACE。
- 进程ID。
- 一个—分隔符来区分实际日志消息的开始。
- 线程名称:用方括号括起来(对于控制台输出可能会被截断)。
- 记录器名称:这通常是源类名称(通常缩写)。
- 日志消息。
1.3 文件输出
SpringBoot默认情况下只在控制台输出日志。要想让它输出日志到文件,需要更改其默认配置,此时需要设置logging.file.name或logging.file.path的属性值。
logging.file.name | logging.file.path | 示例 | 描述 |
---|---|---|---|
null | null | 只在控制台输出 | |
给定值 | null | my.log | 写入指定的日志文件。名称可以是确切位置,也可以是相对于当前目录的位置。 |
null | 给定值 | /var/log | 写入日志到指定目录,名称可以是确切位置,也可以是相对于当前目录的位置,文件名为springboot.log |
给定值 | 给定值 | 同时赋值,优先采用logging.file.name |
- SpringBoot默认配置单个日志文件大小限定为10M,当单个文件达到所设定的最大大小时,将会产生一个备份文件,并创建一个新的日志文件重新记录当前日志。可以通过更改logging.file.max-size属性更改大小限制。
注意:
-
与控制台输出一样,默认情况下会记录ERROR-level,WARN-level和INFO-level的日志消息。
-
除非logging.file.max-history已设置属性,否则将会无限期存档。
-
日志档案的总大小可以通过设置logging.file.total-size-cap的值来限定。当日志归档的总大小超过该阈值时,将删除备份。要在应用程序启动时强制清除日志存档,请使用logging.file.clean-history-on-start属性。
上面全是在讲理论,接下来实践一下,在resources目录新创建application.yml文件并写入以下内容:
logging:
file:
name: /Users/yky/springboot/log/my.log
运行测试程序看一下:
二 常用日志配置的修改
2.1 输出级别
日志记录器包含以下级别(级别由低到高):
级别 | 示例 | 说明 |
---|---|---|
trace | logger.trace(“消息内容”) | 跟踪运行信息 |
debug | logger.debug(“消息内容”) | 调试信息 |
info | logger.info(“消息内容”) | 自定义信息 |
warn | logger.warn(“消息内容”) | 警告信息 |
error | logger.error(“消息内容”) | 错误信息 |
验证一下:
logger.trace("这是trace级别的日志");
logger.debug