SpringBoot日誌功能
- 2020 年 7 月 10 日
- 筆記
- springboot
三、SpringBoot日誌功能
1、日誌框架
市面上的日誌框架:
JUL、JCL、Jboss-logging、Logback、Log4j、Log4j、SLF4J…
日誌門面(日誌的抽象層) | 日誌實現 |
---|---|
Log4j JUL (java.uti.logging) Log4j2 Logback |
左邊選擇一個門面(抽象層),右邊選擇一個實現:
日誌門面:SLF4J;
日誌實現:Logback。
SpringBoot : 底層是Spring框架,Spring框架默認是用JCL ; SpringBoot選用SLF4J和logback。
2、SLF4J使用
2.1、如何在系統中使用SLF4J://www.slf4j.org/
開發的時候,日誌記錄方法的調用,不應該·來直接調用日誌的實現類,而是調用日誌抽象層裏面的方法;
需要給系統裏面導入SLF4J的jar和logback的實現jar
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
圖示:
每一個日誌的實現框架都有自己的配置文件。使用SLF4J以後,配置文件還是做成日誌實現框架自己本身的配置文件。
2.2遺留問題
a ( SLF4J + logback ) : Spring ( commons-logging ) 、Hibernate ( jboss-logging ) 、Mybatis、xxx
統一日誌記錄,即使是別的框架,也能統一使用SLF4J進行輸出?
如何讓系統中所有的日誌都統一到SLF4J :
- 將系統中其他日誌框架先排除出去;
- 用中間包來替換原有的日誌框架;
- 導入SLF4J其他的實現。
3、SpringBoot日誌關係
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.1.RELEASE</version>
<scope>compile</scope>
</dependency>
SpringBoot用它來做日誌功能:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.3.1.RELEASE</version>
<scope>compile</scope>
</dependency>
底層依賴關係:
總結:
-
SpringBoot底層是使用SLF4J + logback的方式進行日誌記錄;
-
SpringBoot把其他的日誌都替換成了SLF4J;
-
中間替換包:
-
如果我們要引入其他框架,一定要把這個框架的默認日誌依賴移除掉。( Spring5默認的抽象層由comons-logging變成SLF4J )。
SpringBoot能自動適配所有的日誌,而且底層使用SLF4J + logback的方式記錄日誌,引入其他框架的時候,只需要把這個框架依賴的日誌框架排除掉。
4、日誌使用
4.1、默認配置
SpringBoot默認幫我們配好了日誌:
//記錄器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
//日誌的級別由低到高:trace<debug<info<warn<error
//可以調整輸出的日誌級別,日誌就只會在這個級別以後的高級別生效
logger.trace("trace日誌");
logger.debug("debug日誌");
//SpringBoot默認使用的是info級別的,也成為root級別
logger.info("info日誌");
logger.warn("warn日誌");
logger.error("error日誌");
}
SpringBoot修改日誌的默認配置:
#指定日誌的輸出級別
logging.level.com.hello=trace
#不指定路徑就在當前項目下生成springboot.log日誌
#可以指定完整的路徑
#logging.file.name=E:/springboot.log
#在當前磁盤的根路徑下創建springHello文件夾和裏面的log文件夾,使用spring.log作為默認文件
logging.file.path=/springHello/log
#在控制太輸出的日誌的格式
logging.pattern.console=
#指定文件中日誌輸出的格式
logging.pattern.file=
4.2、指定配置
給類路徑放上每個日誌框架自己的配置文件即可,SpringBoot就不使用默認配置
ogging System | Customization |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml , or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
logback.xml : 直接就被日誌框架識別了;
logback-spring.xml : 日誌框架就不直接加載日誌的配置項,由SpringBoot解析日誌配置,可以使用SpringBoot的高級Profile功能
<springProfile name="staging">
//可以指定某段配置只在某個環境下生效
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>