Springboot強大的日誌功能你真的瞭解嗎?這些功能你肯定不知道

環境:Springboot2。4。10

日誌配置詳解

Spring Boot使用Commons Logging記錄所有內部日誌,但保留底層日誌實現的開啟狀態。為JUL日誌記錄、Log4J2和Logback提供了預設配置。在每種情況下,記錄器都預先配置為使用控制檯輸出,還可以使用可選的檔案輸出。

預設情況下,如果使用 “Starters”,則使用Logback進行日誌記錄。還包括適當的Logback路由,以確保使用JUL日誌、Commons Logging、Log4J或SLF4J的依賴庫都能正常工作。

Java有很多可用的日誌框架。如果上面的列表令人困惑,請不要擔心。通常,您不需要更改日誌依賴項,Spring Boot預設值也可以正常工作。

1。1 日誌格式

Spring Boot的預設日誌輸出類似於以下示例:

2019-03-05 10:57:51。112 INFO 45469 ——- [ main] org。apache。catalina。core。StandardEngine : Starting Servlet Engine: Apache Tomcat/7。0。522019-03-05 10:57:51。253 INFO 45469 ——- [ost-startStop-1] o。a。c。c。C。[Tomcat]。[localhost]。[/] : Initializing Spring embedded WebApplicationContext2019-03-05 10:57:51。253 INFO 45469 ——- [ost-startStop-1] o。s。web。context。ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms2019-03-05 10:57:51。698 INFO 45469 ——- [ost-startStop-1] o。s。b。c。e。ServletRegistrationBean : Mapping servlet: ‘dispatcherServlet’ to [/]2019-03-05 10:57:51。702 INFO 45469 ——- [ost-startStop-1] o。s。b。c。embedded。FilterRegistrationBean : Mapping filter: ‘hiddenHttpMethodFilter’ to: [/*]

輸出以下專案:

日期和時間:毫秒精度,易於排序。

日誌級別:ERROR, WARN, INFO, DEBUG, or TRACE (錯誤、警告、資訊、除錯或跟蹤) 。

程序ID。

一個——-分隔符,用於區分實際日誌訊息的開始。

執行緒名稱:用方括號括起來(控制檯輸出可能會截斷)。

記錄器名稱:這通常是源類名稱(通常縮寫)。

日誌訊息。

1。2 控制檯輸出

預設日誌配置在寫入訊息時將訊息回顯到控制檯。預設情況下,會記錄錯誤級別error、警告級別warn和資訊級別info的訊息。你還可以透過使用——debug標誌啟動應用程式來啟用“debug”模式。

$ java -jar myapp。jar ——debug

你還可以在application。properties中指定debug=true。

啟用debug模式時,將配置一組核心記錄器(嵌入式容器、Hibernate和Spring Boot)以輸出更多資訊。啟用debug模式不會將應用程式配置為使用debug級別記錄所有訊息。或者,你可以透過使用——trace標誌(或application。properties中的trace=true)啟動應用程式來啟用“trace”模式。這樣做可以為一系列核心記錄器(嵌入式容器、Hibernate模式生成和整個Spring產品組合)啟用跟蹤日誌記錄。

1。3 彩色輸出日誌

如果終端支援ANSI,則顏色輸出用於幫助可讀性。可以將spring。output。ansi。enabled設定為支援的值以覆蓋自動檢測。

使用%clr轉換字配置顏色編碼。在最簡單的形式中,轉換器根據日誌級別為輸出著色,如下例所示:

%clr(%5p)

下表描述了日誌級別到顏色的對映:

Level

Color

FATAL

Red

ERROR

Red

WARN

Yellow

INFO

Green

DEBUG

Green

TRACE

Green

或者,您可以透過將顏色或樣式作為轉換選項來指定應使用的顏色或樣式。例如,要使文字變為黃色,請使用以下設定:

%clr(%d{yyyy-MM-dd HH:mm:ss。SSS}){yellow}

支援以下顏色和樣式:

blue

cyan

faint

green

magenta

red

yellow

具體顏色的配置可以在logback。xml或logback-spring。xml中配置,也可以在application。properties中配置

logging: pattern: console: ‘%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss。SSS}}){Green} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(——-){faint} %clr([%15。15t]){faint} %clr(%-40。40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}’

logback-spring。xml檔案配置

%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%green(%logger:%line) |%black(%msg%n) UTF-8

1。4 日誌輸出檔案

預設情況下,Spring Boot只將日誌記錄到控制檯,不寫入日誌檔案。如果要在控制檯輸出之外寫入日誌檔案,則需要設定

logging。file。name

logging。file。path

屬性(例如,在application。properties中)。

下表顯示瞭如何將logging。*屬性一起使用:

logging.file.name

logging.file.path

Example

Description

(none)

(none)

僅輸出到控制檯

Specific file

(none)

my。log

寫入指定的日誌檔案。名稱可以是精確的位置,也可以是相對於當前目錄的。

(none)

Specific directory

/var/log

將‘spring。log’寫入指定目錄。名稱可以是精確的位置,也可以是相對於當前目錄的。

日誌檔案在達到10 MB時會旋轉,並且與控制檯輸出一樣,預設情況下會記錄錯誤級別、警告級別和資訊級別的訊息。

注意:logging.file.name與logging.file.path 不能同時出現

示例:

logging: level: com。pack: info web: trace file: name: d:/logs/l。log

1。5 日誌檔案轉動/交替

如果使用的是Logback,則可以使用application。properties或application。yaml檔案微調日誌轉動/交替設定。對於所有其他日誌系統,你需要自己直接配置轉動/交替設定(例如,如果使用Log4J2,則可以新增log4j。xml檔案)。

支援以下輪換策略屬性:

Name

Description

logging。logback。rollingpolicy。file-name-pattern

用於建立日誌存檔的檔名模式。

logging。logback。rollingpolicy。clean-history-on-start

如果在應用程式啟動時應進行日誌歸檔清理。

logging。logback。rollingpolicy。max-file-size

歸檔前日誌檔案的最大大小。

logging。logback。rollingpolicy。total-size-cap

刪除日誌存檔檔案之前可以接受的最大大小。

logging。logback。rollingpolicy。max-history

保留日誌存檔的天數(預設為7)

如下:

logging: logback: rollingpolicy: max-file-size: 2KB

控制日誌檔案大小,不超過2KB,超過的自動歸檔(生成壓縮包)

1。5 日誌級別

所有受支援的日誌記錄系統都可以透過使用logging。level。

=

在Spring環境中設定記錄器級別(例如,在application。properties中),其中級別是跟蹤trace、除錯debug、資訊info、警告warn、錯誤error、致命fatal或關閉off之一。可以使用logging。level。root配置根日誌記錄器。

以下示例顯示application。properties中的可能的日誌記錄設定:

logging: level: root: “warn” org。springframework。web: “debug” org。hibernate: “error” com。pack: “error”

還可以使用環境變數設定日誌記錄級別。例如,日誌記錄_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG將ORG。SPRINGFRAMEWORK。WEB設定為DEBUG。

1。6 日誌分組

能夠將相關的記錄器分組在一起通常很有用,這樣就可以同時對它們進行配置。例如,你可能通常會更改所有Tomcat相關記錄器的日誌記錄級別,但你無法輕鬆記住頂級軟體包。為了幫助實現這一點,SpringBoot允許你在Spring環境中定義日誌記錄組。例如,你可以透過將“tomcat”組新增到application。properties來定義它:

logging: group: tomcat: “org。apache。catalina,org。apache。coyote,org。apache。tomcat” #這裡如果配置了會報錯,應該還需要配置什麼吧。

透過上面的定義後,你可以使用一行更改組中所有記錄器的級別:

logging: level: tomcat: “trace”

Spring Boot包括以下可開箱即用的預定義日誌組:

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

sql

org。springframework。jdbc。core

org。hibernate。SQL

org。jooq。tools。LoggerListener

這兩個非常有用。

Springboot強大的日誌功能你真的瞭解嗎?這些功能你肯定不知道

1。7 自定義日誌配置

可以透過在類路徑上包含適當的庫來啟用各種日誌記錄系統,還可以透過在類路徑的根目錄中或以下Spring環境屬性指定的位置提供適當的配置檔案來進一步定製:

logging。config

透過使用

org。springframework。Boot。logging。LoggingSystem

屬性,可以強制Spring引導使用特定的日誌系統。該值應該是LoggingSystem實現的完全限定類名。您還可以使用none值完全禁用Spring Boot的日誌記錄配置。

由於日誌記錄是在建立ApplicationContext之前初始化的,因此無法從Spring的@Configuration檔案中的@PropertySources控制日誌記錄。更改或完全禁用日誌系統的唯一方法是透過系統屬性。

根據你的日誌記錄系統,將載入以下檔案:

日誌系統

定製

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

如果可能,我們建議您在日誌配置中使用-spring變體(例如,logback-spring。xml而不是logback。xml)。如果使用標準配置位置,Spring無法完全控制日誌初始化。

為了幫助進行自定義,其他一些屬性將從Spring環境傳輸到系統屬性,如下表所述:

Spring Environment

System Property

Comments

logging。exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

記錄異常時使用的轉換字。

logging。file。name

LOG_FILE

如果已定義,則在預設日誌配置中使用。

logging。file。path

LOG_PATH

如果已定義,則在預設日誌配置中使用。

logging。pattern。console

CONSOLE_LOG_PATTERN

要在控制檯(stdout)上使用的日誌模式。

logging。pattern。dateformat

LOG_DATEFORMAT_PATTERN

日誌日期格式的追加器模式。

logging。charset。console

CONSOLE_LOG_CHARSET

用於控制檯日誌記錄的字符集。

logging。pattern。file

FILE_LOG_PATTERN

要在檔案中使用的日誌模式(如果啟用了“日誌檔案”)。

logging。charset。file

FILE_LOG_CHARSET

用於檔案記錄的字符集(如果啟用了

LOG_FILE

)。

logging。pattern。level

LOG_LEVEL_PATTERN

呈現日誌級別時要使用的格式(預設為

%5p

)。

PID

PID

當前程序ID(如果可能,在尚未定義為OS環境變數時發現)。

上面這些屬性(System Property)我們可以在logback-spring。xml檔案中直接引用,如下:

[${PID}] - [${LOG_FILE}] - [${LOG_LEVEL_PATTERN}] %yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-6level) |%green(%logger:%line) |%black(%msg%n) UTF-8

配置

logging。pattern。level

屬性

logging: pattern: level: INFO

輸出:

[13036] - [d:/logs/l。log] - [INFO] •[33m2021-09-23 14:34:02•[0;39m |•[34mINFO •[0;39m

如果使用的是Logback,則還會傳輸以下屬性:

Spring Environment

System Property

Comments

logging。logback。rollingpolicy。file-name-pattern

LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN

滾動日誌檔名的模式 (default

${LOG_FILE}。%d{yyyy-MM-dd}。%i。gz

)。

logging。logback。rollingpolicy。clean-history-on-start

`LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START

是否在啟動時清理歸檔日誌檔案。

logging。logback。rollingpolicy。max-file-size

LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE

最大日誌檔案大小。

logging。logback。rollingpolicy。total-size-cap

LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP

要保留的日誌備份的總大小。

logging。logback。rollingpolicy。max-history

`LOGBACK_ROLLINGPOLICY_MAX_HISTORY

要保留的最大歸檔日誌檔案數。

所有受支援的日誌系統在解析其配置檔案時都可以查閱系統屬性。有關示例,請參閱spring-boot。jar中的預設配置:

Logback

Log4j 2

Java Util logging

1。8 Logback擴充套件

Spring Boot包括許多對Logback的擴充套件,這些擴充套件可以幫助進行高階配置。你可以在logback-spring。xml配置檔案中使用這些副檔名。

因為標準logback。xml配置檔案載入得太早,所以不能在其中使用副檔名。您需要使用logback-spring。xml或定義logging。config屬性。

1。8。1 配置檔案特定配置

標記允許你根據活動的Spring配置檔案選擇性地包括或排除配置部分。配置檔案部分在

元素中的任何位置都受支援。使用name屬性指定接受配置的配置檔案。

標記可以包含配置檔名稱(例如staging)或配置檔案表示式。配置檔案表示式允許表達更復雜的配置檔案邏輯,例如生產 和(central | west)。有關更多詳細資訊,請參閱參考指南。以下列表顯示了三個示例配置檔案:

<!—— configuration to be enabled when the “staging” profile is active ——> <!—— configuration to be enabled when the “dev” or “staging” profiles are active ——> <!—— configuration to be enabled when the “production” profile is not active ——>

1。8。2 環境屬性

標記允許你公開Spring環境中的屬性,以便在Logback中使用。如果你想從Logback配置中的application。properties檔案中訪問值,那麼這樣做很有用。該標記的工作方式與Logback的標準

標記類似。但是,你可以指定屬性的源(來自環境),而不是指定直接值。如果需要將屬性儲存在本地範圍以外的其他位置,可以使用scope屬性。如果需要回退值(在環境中未設定屬性的情況下),可以使用defaultValue屬性。以下示例顯示瞭如何公開在Logback中使用的屬性:

${fluentHost} 。。。

示例:

配置檔案配置自定義屬性:

custom: props: host: 127。0。0。1

日誌檔案定義(logback-spring。xml):

日誌檔案中使用

[${host}] - [${PID}] - [${LOG_FILE}] - [${LOG_LEVEL_PATTERN}] %yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-6level) |%green(%logger:%line) |%black(%msg%n) UTF-8

測試輸出:

[127。0。0。1] - [23188] - [d:/logs/l。log] - [INFO] •[33m2021-09-23 14:46:46•[0;39m |•[34mINFO •[0;39m |

完畢!!!

公眾號:Springboot實戰案例錦集

關注,私信贈送電子書

SpringBoot專案中第三方介面呼叫方式

SpringBoot分散式事務之最大努力通知

Springboot配置檔案yml各種複雜物件配置方法

SpringBoot專案使用Prometheus實時監控系統各項指標

Springboot中常見的@Import註解的三種使用方式詳解

springboot中使用布隆過濾器BloomFilter

Springboot啟動過程中的這個BeanPostProcessor你知道幹什麼的嗎

SpringBoot整合ElasticSearch詳解及相關使用方法

使用Spring Boot Admin實時監控你的系統

Springboot註冊Servlet幾種方式你都知道?內部實現原理解析

SpringBoot 專案啟動完後你想做點什麼?Order介面控制順序執行

Springboot強大的日誌功能你真的瞭解嗎?這些功能你肯定不知道

Springboot強大的日誌功能你真的瞭解嗎?這些功能你肯定不知道

Springboot強大的日誌功能你真的瞭解嗎?這些功能你肯定不知道