Spring Boot 日志管理
在代码有问题的时候,很多人应该都是通过 debug 的方式去排查,往往忽略了日志的重要性。
好的日志管理可以快速定位问题出现的位置,也可以提高代码的阅读性。这篇博文主要介绍一下 Spring Boot 中关于日志方面的知识。
一、Logging 介绍
Spring Boot 为 Java Util Logging,Log4J2 和 Logback 提供了默认配置。每个日志框架,都默认配置了控制台输出,并且还提供了日志文件输出功能。
如果你使用 Spring Boot 的 Starters,那么默认使用的日志框架是 Logback。Spring Boot 底层也对 Java Util Logging,Commons Logging,Log4J 或 SLF4J 日志框架进行了适配。因此只要进行相关的设置,就可以实现日志框架的切换。
提供了这么多日志框架,应该选择哪一个呢?不用担心,在不修改任何日志依赖项的时候,Spring Boot 的日志框架就可以正常运行。
二、Logging 格式
Spring Boot 默认日志输出如下:
- 日期时间:精确到毫秒
- 日志级别:
ERROR
,WARN
,INFO
,DEBUG
orTRACE
- 进程 id
- 分割符:用于区分实际的日志记录
- 线程名:括在方括号中
- 日志名字:通常是源类名
- 日志信息
三、Logging 级别
日志级别从低到高依次是:TRACE
< DEBUG
< INFO
< WARN
< ERROR
< FATAL
。Logback 日志不提供 FATAL 级别,它被映射到 ERROR 级别。
Spring Boot 只会输出比当前级别高的日志,默认的日志级别是 INFO
,因此低于 INFO
级别的日志记录都不输出。
可以在 application.properties
配置文件中通过 logging.level.<logger-name>=<level>
方式设置日志的级别。
在默认级别(INFO
)下执行下面的代码:
@SpringBootTest
@RunWith(SpringRunner.class)
public class LoggerTest {
private static final Logger logger = LoggerFactory.getLogger(LoggerTest.class);
@Test
public void test() {
logger.trace("trace 级别的日志");
logger.debug("debug 级别的日志");
logger.info("info 级别的日志");
logger.warn("warn 级别的日志");
logger.error("error 级别的日志");
}
}
控制台输出如下:
四、other
4.1 日志文件输出
默认情况下,Spring Boot 日志仅输出在控制台,不会写入日志文件。如果想要写入日志文件,需要在 application.properties
中设置 logging.file
或 logging.path
属性。
logging.file
:设置文件,可以是绝对路径,也可以是相对路径。logging.path
:设置目录,会在该目录下创建一个 spring.log 文件,写入日志内容
日志文件在达到 10 MB 时会轮换,并且与控制台输出一样,默认情况下会记录 ERROR
级别,WARN
级别和 INFO
级别的消息。 可以使用 logging.file.max-size
属性更改大小限制。
4.2 通用配置
下面是 application.properties
文件中关于日志的配置,贴出来供大家参考。
# 启用日志颜色
spring.output.ansi.enabled=always
logging.level.root=INFO
# mapper 接口所在的包设置为 debug
logging.level.com.×××.mapper=DEBUG
# 在当前项目下生成日志文件
logging.file=./logs/×××.log
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %clr(%logger){cyan} %clr(%msg%n){green}
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
PS:
虽然 Spring Boot 适配了多种日志框架,一般情况下,我们不会切换掉 Logback,因为 Logback 相对于其他的日志框架速度更快,占用内存更少。
关于工作中日志的开发,可以参考一下这篇博文:日志打印
下一篇: Spring Boot 日志管理
推荐阅读