SLF4J
Spring Boot在所有內部日志中使用Commons Logging,但是默認配置也提供了對常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每種Logger都可以通過配置使用控制台或者文件輸出日志內容。
SLF4J——Simple Logging Facade For Java,它是一個針對於各類Java日志框架的統一Facade抽象。Java日志框架眾多——常用的有java.util.logging
, log4j
, logback
,commons-logging
, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定義了統一的日志抽象接口,而真正的日志實現則是在運行時決定的——它提供了各類日志框架的binding。
Logback是log4j框架的作者開發的新一代日志框架,它效率更高、能夠適應諸多的運行環境,同時天然支持SLF4J。
默認情況下,Spring Boot會用Logback來記錄日志,並用INFO級別輸出到控制台。在運行應用程序和其他例子時,啟動項目輸出的日志文件就是。
日志輸出內容元素具體如下:
- 時間日期:精確到毫秒
- 日志級別:ERROR, WARN, INFO, DEBUG or TRACE
- 進程ID
- 分隔符:
---
標識實際日志的開始 - 線程名:方括號括起來(可能會截斷控制台輸出)
- Logger名:通常使用源代碼的類名
- 日志內容
日志框架的使用
1.默認配置
Spring Boot為我們提供了很多默認的日志配置,所以,只要將spring-boot-starter-logging作為依賴加入到當前應用中即可。
2.控制台輸出順序
日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低於WARN的信息都不會輸出。
Spring Boot中默認配置ERROR
、WARN
和INFO
級別的日志輸出到控制台。還可以通過啟動您的應用程序–debug標志來啟用。
1 @Slf4j 2 @SpringBootApplication 3 public class Test01Application { 4 5 6 public void index(){ 7 8 //日志的級別; 9 //由低到高 trace<debug<info<warn<error 10 //可以調整輸出的日志級別;日志就只會在這個級別以以后的高級別生效 11 //SpringBoot默認給我們使用的是info級別的,沒有指定級別的就用SpringBoot默認規定的級別;root級別 12 log.trace(""); 13 log.debug("測試信息"); 14 log.info("普通信息"); 15 log.warn("警告進行"); 16 log.error("錯誤信息"); 17 18 } 19 20 21 public static void main(String[] args) { 22 SpringApplication.run(Test01Application.class, args); 23 } 24 }
3.級別控制
所有支持的日志記錄系統都可以在Spring環境中設置記錄級別(在application.properties中)
格式為:’logging.level.* = LEVEL’
logging.level
:日志級別控制前綴,*
為包名或Logger名LEVEL
:選項TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
如果想要在修改日志級別,可以直接在配置文件中設置。
logging.level.com.test=trace #logging.path= # 不指定路徑在當前項目下生成springboot.log日志 # 可以指定完整的路徑; #logging.file=G:/springboot.log # 在當前磁盤的根路徑下創建spring文件夾和里面的log文件夾;使用 spring.log 作為默認文件 logging.path=/spring/log # 在控制台輸出的日志的格式 logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n # 指定文件中日志輸出的格式 logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
日志輸出格式: %d表示日期時間, %thread表示線程名, %-5level:級別從左顯示5個字符寬度 %logger{50} 表示logger名字最長50個字符,否則按照句點分割。 %msg:日志消息, %n是換行符 --> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
4.切換日志框架
slf4j+log4j的方式:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> <exclusion> <artifactId>log4j-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>
切換為log4j2
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>