SpringBoot 官方文檔:https://docs.spring.io/spring-boot/docs/2.7.12/reference/htmlsingle
SpringBoot 底層依賴
Spring Boot 對所有內(nèi)部日志記錄使用 Commons Logging,但使底層日志實(shí)現(xiàn)保持為打開狀態(tài)。 為 Java Util Logging、Log4J2 和 Logback 提供了默認(rèn)配置。默認(rèn)情況下,Logback、 Java Util Logging、Commons Logging、Log4J 或 SLF4J 都能正常工作。而 Spring Boot 中使用了 SLF4J + Logback 作為默認(rèn)的日志框架,因此我們不需要更改日志記錄依賴項(xiàng),Spring 引導(dǎo)默認(rèn)值就可以正常工作。SpringBoot 底層日志依賴關(guān)系如圖所示:
在 spring-boot-starter
依賴下有 spring-boot-starter-logging
日志依賴,后續(xù)的 logback-core
、logback-core
依賴即使用 Logback
記錄日志,而 jul-to-slf4j
、log4j-to-slf4j
即將 JUL
和 Log4j
日志框架轉(zhuǎn)為 Slf4j
日志框架,即所謂的橋接器。
日志組
我們也可以將相關(guān)的日志記錄器組合在一起,以便可以同時配置它們。例如,可能經(jīng)常更改所有與 Tomcat 相關(guān)的記錄器的日志記錄級別,我們可以在 YAML 配置文件中將與 Tomcat 相關(guān)的包添加成一個組,之后再對組設(shè)置日志輸出的級別:
logging:
group:
# 自定義組名,設(shè)置當(dāng)前組中所包含的包
tomcat: org.apache.catalina,org.apache.coyote,org.apache.tomcat
SpringBoot 包括以下預(yù)定義的日志記錄組:
Name | Loggers |
web | org.springframework.core.codec org.springframework.http org.springframework.web org.springframework.boot.actuate.endpoint.web org.springframework.boot.web.servlet.ServletContextInitializerBeans org.springframework.core.codec org.springframework.http org.springframework.web org.springframework.boot.actuate.endpoint.web org.springframework.boot.web.servlet.ServletContextInitializerBeans |
sql | org.springframework.jdbc.core org.hibernate.SQL org.jooq.tools.LoggerListener org.springframework.jdbc.core org.jooq.tools.LoggerListener |
日志級別
在SpringBoot 中,日志的級別默認(rèn)分為7個級別:TRACE(跟蹤)、DEBUG(調(diào)試)、 INFO(信息)、WARN(警告)、ERROR(錯誤)、FATAL(致命)、OFF(關(guān)閉)。
我們可以根據(jù)需要設(shè)置不同的日志級別,在 SpringBoot 的 YAML 配置文件中對所有的日志框架輸出的日志級別進(jìn)行設(shè)置。我們可以對全局或者指定分組以及指定包分別設(shè)置日志的輸出級別:
logging:
level:
# 設(shè)置root根節(jié)點(diǎn)級別,即整體應(yīng)用日志級別,輸出 WARN 級別及以上的日志信息
root: warn
# 為對應(yīng)組設(shè)置日志級別,輸出 TRACE 級別及以上的日志信息
tomcat: trace
# 為對包設(shè)置日志級別,輸出 DEBUG 級別及以上的日志信息
com.example.logging: debug
日志格式
在配置文件中設(shè)置日志的輸出格式:
# 設(shè)置日志輸出格式
logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{36}] - %msg%n"
SpringBoot 的默認(rèn)日志輸出格式如下:
輸出格式如下:
輸出項(xiàng) | 描述 |
---|---|
Date and Time | 日期和時間:毫秒級精度,易于排序 |
Log Level | 日志級別:ERROR WARN INFO DEBUG TRACE
|
Process ID | 進(jìn)程 Id |
--- |
用于區(qū)分實(shí)際日志消息開頭的分隔符 |
Thread name | 線程名,括在方括號中(對于控制臺輸出,可能會被截斷) |
Logger name | 記錄器名稱:通常是源類名稱(通常縮寫) |
message | 日志消息 |
常用占位符如下:
占位符 | 描述 |
---|---|
%d |
表示輸出到毫秒的時間,例如%d{yyyy-MM-dd HH:mm:ss.SSS}
|
%-5level |
輸出日志級別,-5表示左對齊并且固定輸出5個字符,如果不足在右邊補(bǔ)0 |
%n |
輸出換行符 |
%thread |
輸出日志的線程名稱,例如:main |
%logger |
輸出日志記錄器名稱,例如:com.example.MyClass |
%msg |
輸出日志的消息內(nèi)容 |
%X |
輸出 MDC(Mapped Diagnostic Context)中的鍵值對,例如:%X{user} |
%class |
輸出日志的類名,例如:com.example.MyClass |
%method |
輸出日志的方法名,例如:doSomething |
%file |
輸出日志的文件名,例如:MyClass.java |
%line |
例如:10 |
%color() | 顏色:%black、%shired、%green、%yellow、%blue、%magenta、%cyan、%white、%gray、%boldRed、%boldGreen、%boldYellow、%boldBlue、%boldMagenta、%boldCyan、%boldWhite、%highlight
|
以上是一些常用的占位符,可以根據(jù)需要自行組合使用。
Spring Boot使用Logback作為默認(rèn)的日志框架,可以通過在application.properties或application.yml文件中設(shè)置日志級別和日志輸出格式。
以下是application.yml中常用的日志配置選項(xiàng):
# 設(shè)置日志輸出文件的路徑和名稱
logging:
file:
name: myapp.log
path: /var/log/myapp/
以上示例中,logging.level 設(shè)置日志級別,logging.pattern設(shè)置日志輸出格式,logging.file.name和logging.file.path設(shè)置日志輸出文件的路徑和名稱。需要注意的是,如果同時設(shè)置了logging.file和logging.path選項(xiàng),則logging.file選項(xiàng)將覆蓋logging.path選項(xiàng)。
文件輸出
SpringBoot 默認(rèn)會將日志輸出到控制臺,并不會寫入日志文件。 如果我們需要將日志寫入日志文件,則需要在 application.yml
中進(jìn)行相關(guān)配置:
# 設(shè)置日志輸出文件的路徑和名稱
logging:
file:
name: myapp.log
path: /var/log/myapp/
logging.file.name |
logging.file.path |
樣例 | 描述 |
---|---|---|---|
(無) | (無) | 僅控制臺日志記錄。 | |
特定文件 | (無) | my.log |
寫入指定的日志文件。 名稱可以是確切的位置,也可以是相對于當(dāng)前目錄的位置。 |
(無) | 特定目錄 | /var/log |
寫入指定的目錄。 名稱可以是確切的位置,也可以是相對于當(dāng)前目錄的位置。spring.log
|
Tip
logging.file.name 和 logging.file.path 設(shè)置日志輸出文件的路徑和名稱。需要注意的是,如果同時設(shè)置了logging.file 和 logging.path 選項(xiàng),則 logging.file 選項(xiàng)將覆蓋 logging.path 選項(xiàng)。
自定義日志配置
在 SpringBoot 中,我們除了使用默認(rèn)的配置外,還可以通過在 src/main/resources
目錄下添加自定義日志配置文件來自定義日志輸出的格式、級別、以及日志文件的位置等信息。
方式1:限定文件名
通過 SpringBoot 指定限定名的方式:項(xiàng)目啟動時會自動進(jìn)行加載:
日志框架 | 配置文件名 |
---|---|
Logback |
logback-spring.xml 、logback.xml
|
Log4j2 |
log4j2-spring.xml 、log4j2.xml
|
Log4j | log4j.properties |
JDK (Java Util Logging) | logging.properties |
使用該方式,Spring 官方推薦建議您我們使用 *-spring.xml
的限定名,這樣可以交由 SpringBoot 控制日志,我們也可以對其中的配置進(jìn)行更加細(xì)化的設(shè)置:
<springProfile name="dev">
<!-- 配置項(xiàng)在 spring.profiles.active=dev 的環(huán)境下啟動 -->
</springProfile>
<springProfile name="!dev">
<!-- 配置項(xiàng)在 spring.profiles.active!=dev 的環(huán)境下啟動 -->
</springProfile>
方式2:自定義文件名
以下是自定義日志文件名的步驟:
- 在 src/main/resources 目錄下創(chuàng)建一個名為 logback-dev.xml 的文件,這個文件名稱可以自定義。
- 在配置文件中指定日志配置文件:
logging.config=classpath:logging-config.xml
日志框架切換
Logback To Log4j
原理圖如右圖:
方式1
我們需要將對應(yīng) logback
框架的依賴進(jìn)行移除,添加 slf4j-log4j12
的適配器即可。
-
移除日志框架
logback
的依賴:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency>
-
引入適配器
slf4j-log4j12
和log4j
的依賴<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>
方式2
-
移除
spring-boot-starter-logging
依賴:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>
-
添加
spring-boot-starter-log4j
依賴:<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> <version>1.3.8.RELEASE</version> </dependency>
添加 log4j.properties 配置文件
log4j 不提供默認(rèn)配置,因?yàn)檩敵龅娇刂婆_或者文件系統(tǒng)在某些環(huán)境中可能是被禁止的。所以需要在 resources
目錄下手動添加配置文件,配置文件名為 log4j.properties
。
Logback To Log4j2
同理,我們需要排除原有的依賴,替換新的依賴即可:
-
移除依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>
-
添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
-
需要異步文章來源:http://www.zghlxwxcb.cn/news/detail-492152.html
<!--開啟異步時需要導(dǎo)入依賴--> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.2</version> </dependency>
添加配置文件
有關(guān)部分請查看文章:深入理解 SpringBoot 日志框架:從入門到高級應(yīng)用——(五)Log4j2配置文件詳解文章來源地址http://www.zghlxwxcb.cn/news/detail-492152.html
到了這里,關(guān)于深入理解 SpringBoot 日志框架:從入門到高級應(yīng)用——(七)SpringBoot日志配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!