在代碼有問題的時候,很多人應該都是通過 debug 的方式去排查,往往忽略了日志的重要性。
好的日志管理可以快速定位問題出現(xiàn)的位置坦仍,也可以提高代碼的閱讀性。這篇博文主要介紹一下 Spring Boot 中關于日志方面的知識叨襟。
一繁扎、Logging 介紹
Spring Boot 為 Java Util Logging,Log4J2 和 Logback 提供了默認配置糊闽。每個日志框架梳玫,都默認配置了控制臺輸出,并且還提供了日志文件輸出功能右犹。
如果你使用 Spring Boot 的 Starters提澎,那么默認使用的日志框架是 Logback。Spring Boot 底層也對 Java Util Logging念链,Commons Logging盼忌,Log4J 或 SLF4J 日志框架進行了適配。因此只要進行相關的設置钓账,就可以實現(xiàn)日志框架的切換碴犬。
提供了這么多日志框架,應該選擇哪一個呢梆暮?不用擔心,在不修改任何日志依賴項的時候绍昂,Spring Boot 的日志框架就可以正常運行啦粹。
二、Logging 格式
Spring Boot 默認日志輸出如下:
- 日期時間:精確到毫秒
- 日志級別:ERROR窘游, WARN唠椭, INFO, DEBUG or TRACE
- 進程 id
- 分割符:用于區(qū)分實際的日志記錄
- 線程名:括在方括號中
- 日志名字:通常是源類名
- 日志信息
三忍饰、Logging 級別
日志級別從低到高依次是:TRACE < DEBUG < INFO < WARN < ERROR < FATAL贪嫂。Logback 日志不提供 FATAL 級別,它被映射到 ERROR 級別艾蓝。
Spring Boot 只會輸出比當前級別高的日志力崇,默認的日志級別是 INFO,因此低于 INFO 級別的日志記錄都不輸出赢织。
可以在 application.properties
配置文件中通過 logging.level.<logger-name>=<level>
方式設置日志的級別亮靴。
在默認級別(INFO)下執(zhí)行下面的代碼:
@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
:設置目錄芯侥,會在該目錄下創(chuàng)建一個 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 相對于其他的日志框架速度更快奖地,占用內存更少。
原文鏈接:https://blog.csdn.net/codejas/java/article/details/82144667