日誌
Spring Boot 對所有內部日誌記錄使用 Commons Logging,但底層日誌實現是開放的。為 Java Util Logging、Log4j2 和 Logback 提供了預設配置。在每種情況下,日誌記錄器都預配置為使用控制檯輸出,並可選地提供檔案輸出。
預設情況下,如果你使用 starter,會使用 Logback 進行日誌記錄。還包括適當的 Logback 路由,以確保使用 Java Util Logging、Commons Logging、Log4J 或 SLF4J 的依賴庫都能正常工作。
Java 有許多可用的日誌框架。如果上面的列表讓你感到困惑,請不用擔心。通常情況下,你無需更改日誌依賴項,Spring Boot 的預設設定就能很好地工作。 |
當你將應用部署到 Servlet 容器或應用伺服器時,使用 Java Util Logging API 執行的日誌不會路由到你的應用日誌中。這可以防止由容器或部署到其中的其他應用執行的日誌出現在你的應用日誌中。 |
日誌格式
Spring Boot 的預設日誌輸出類似於以下示例
2025-04-24T13:04:32.244Z INFO 127615 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : Starting MyApplication using Java 17.0.15 with PID 127615 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2025-04-24T13:04:32.277Z INFO 127615 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : No active profile set, falling back to 1 default profile: "default"
2025-04-24T13:04:37.586Z INFO 127615 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-04-24T13:04:37.655Z INFO 127615 --- [myapp] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-04-24T13:04:37.657Z INFO 127615 --- [myapp] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.40]
2025-04-24T13:04:37.818Z INFO 127615 --- [myapp] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-04-24T13:04:37.820Z INFO 127615 --- [myapp] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5186 ms
2025-04-24T13:04:39.165Z INFO 127615 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2025-04-24T13:04:39.199Z INFO 127615 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : Started MyApplication in 9.336 seconds (process running for 10.225)
2025-04-24T13:04:39.250Z INFO 127615 --- [myapp] [ionShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete
2025-04-24T13:04:39.268Z INFO 127615 --- [myapp] [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete
輸出以下項
-
日期和時間:精確到毫秒,易於排序。
-
日誌級別:
ERROR
、WARN
、INFO
、DEBUG
或TRACE
。 -
程序 ID。
-
一個
---
分隔符,用於區分實際日誌訊息的開始。 -
應用名稱:用方括號括起來(僅在設定了
spring.application.name
時預設記錄) -
應用分組:用方括號括起來(僅在設定了
spring.application.group
時預設記錄) -
執行緒名稱:用方括號括起來(在控制檯輸出中可能會被截斷)。
-
關聯 ID:如果啟用了跟蹤(未在上面的示例中顯示)
-
日誌記錄器名稱:通常是源類名(經常縮寫)。
-
日誌訊息。
Logback 沒有 FATAL 級別。它被對映到 ERROR 。 |
如果你設定了 spring.application.name 屬性但不想記錄它,可以將 logging.include-application-name 設定為 false 。 |
如果你設定了 spring.application.group 屬性但不想記錄它,可以將 logging.include-application-group 設定為 false 。 |
有關關聯 ID 的更多詳細資訊,請參閱此文件。 |
控制檯輸出
預設日誌配置會將訊息寫入控制檯時進行回顯。預設情況下,會記錄 ERROR
級別、WARN
級別和 INFO
級別的訊息。你還可以透過使用 --debug
標誌啟動應用來啟用“除錯”模式。
$ java -jar myapp.jar --debug
你也可以在你的 application.properties 中指定 debug=true 。 |
啟用除錯模式後,會配置一部分核心日誌記錄器(嵌入式容器、Hibernate 和 Spring Boot)輸出更多資訊。啟用除錯模式並不會配置你的應用以 DEBUG
級別記錄所有訊息。
或者,你可以透過使用 --trace
標誌(或在你的 application.properties
中設定 trace=true
)啟動應用來啟用“跟蹤”模式。這樣做會為一部分核心日誌記錄器(嵌入式容器、Hibernate 模式生成以及整個 Spring 體系)啟用跟蹤日誌記錄。
彩色輸出
如果你的終端支援 ANSI,會使用彩色輸出以提高可讀性。你可以將 spring.output.ansi.enabled
設定為支援的值來覆蓋自動檢測。
透過使用 %clr
轉換詞來配置顏色編碼。在最簡單的形式下,轉換器會根據日誌級別為輸出著色,如下例所示
%clr(%5p)
下表描述了日誌級別到顏色的對映
級別 | 顏色 |
---|---|
|
紅色 |
|
紅色 |
|
黃色 |
|
綠色 |
|
綠色 |
|
綠色 |
或者,你可以透過將顏色或樣式作為轉換的選項來指定應使用的顏色或樣式。例如,要使文字顯示為黃色,使用以下設定
%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}){yellow}
支援以下顏色和樣式
-
藍色
-
青色
-
暗淡
-
綠色
-
洋紅色
-
紅色
-
黃色
檔案輸出
預設情況下,Spring Boot 只將日誌輸出到控制檯,不寫入日誌檔案。如果你想除了控制檯輸出外還寫入日誌檔案,你需要設定 logging.file.name
或 logging.file.path
屬性(例如,在你的 application.properties
中)。如果這兩個屬性都設定了,logging.file.path
將被忽略,只使用 logging.file.name
。
下表顯示瞭如何一起使用 logging.*
屬性
logging.file.name |
logging.file.path |
描述 |
---|---|---|
(無) |
(無) |
僅控制檯日誌記錄。 |
特定檔案(例如, |
(無) |
寫入 |
(無) |
特定目錄(例如, |
將 |
特定檔案 |
特定目錄 |
寫入 |
日誌檔案達到 10 MB 時會輪轉,與控制檯輸出一樣,預設情況下會記錄 ERROR
級別、WARN
級別和 INFO
級別的訊息。
日誌屬性獨立於實際的日誌基礎設施。因此,特定的配置鍵(例如 Logback 的 logback.configurationFile )不由 Spring Boot 管理。 |
檔案輪轉
如果你使用 Logback,可以使用你的 application.properties
或 application.yaml
檔案微調日誌輪轉設定。對於所有其他日誌系統,你需要自己直接配置輪轉設定(例如,如果你使用 Log4j2,可以新增 log4j2.xml
或 log4j2-spring.xml
檔案)。
支援以下輪轉策略屬性
名稱 | 描述 |
---|---|
|
用於建立日誌歸檔的檔名模式。 |
|
應用啟動時是否應清理日誌歸檔。 |
|
在日誌檔案被歸檔前的最大大小。 |
|
日誌歸檔在被刪除前的最大總大小。 |
|
保留的歸檔日誌檔案的最大數量(預設為 7)。 |
日誌級別
所有支援的日誌系統都可以透過在 Spring Environment
中設定日誌記錄器級別(例如,在 application.properties
中),使用 logging.level.<logger-name>=<level>
格式,其中 level
是 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 或 OFF 中的一個。root
日誌記錄器可以使用 logging.level.root
進行配置。
以下示例顯示了 application.properties
中可能的日誌設定
-
Properties
-
YAML
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
logging:
level:
root: "warn"
org.springframework.web: "debug"
org.hibernate: "error"
也可以使用環境變數設定日誌級別。例如,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG
會將 org.springframework.web
的級別設定為 DEBUG
。
上述方法只適用於包級別的日誌記錄。由於 relaxed binding 總是將環境變數轉換為小寫,因此無法透過這種方式配置單個類的日誌記錄。如果你需要配置某個類的日誌記錄,可以使用 SPRING_APPLICATION_JSON 變數。 |
日誌分組
通常將相關的日誌記錄器分組在一起非常有用,這樣可以同時配置它們。例如,你可能經常需要更改所有與 Tomcat 相關的日誌記錄器的日誌級別,但你可能無法輕鬆記住頂層包名。
為了提供幫助,Spring Boot 允許你在 Spring Environment
中定義日誌分組。例如,你可以透過將其新增到你的 application.properties
來定義一個名為“tomcat”的分組
-
Properties
-
YAML
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
logging:
group:
tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat"
定義後,你可以透過一行程式碼更改分組中所有日誌記錄器的級別
-
Properties
-
YAML
logging.level.tomcat=trace
logging:
level:
tomcat: "trace"
Spring Boot 包括以下預定義的日誌分組,可以直接使用
名稱 | 日誌記錄器 |
---|---|
web |
|
sql |
|
使用日誌關閉鉤子
為了在應用終止時釋放日誌資源,提供了一個關閉鉤子,它會在 JVM 退出時觸發日誌系統清理。除非你的應用部署為 war 檔案,否則此關閉鉤子會自動註冊。如果你的應用具有複雜的上下文層次結構,則關閉鉤子可能無法滿足你的需求。如果不能滿足,請停用關閉鉤子並研究底層日誌系統直接提供的選項。例如,Logback 提供了上下文選擇器,允許在自己的上下文中建立每個 Logger。你可以使用 logging.register-shutdown-hook
屬性停用關閉鉤子。將其設定為 false
將停用註冊。你可以在你的 application.properties
或 application.yaml
檔案中設定此屬性
-
Properties
-
YAML
logging.register-shutdown-hook=false
logging:
register-shutdown-hook: false
自定義日誌配置
透過在類路徑中包含相應的庫,可以啟用各種日誌系統,並且可以透過在類路徑的根目錄或由以下 Spring Environment
屬性指定的位置提供合適的配置檔案來進一步定製:logging.config
。
你可以透過使用 org.springframework.boot.logging.LoggingSystem
系統屬性強制 Spring Boot 使用特定的日誌系統。該值應是 LoggingSystem
實現的完全限定類名。你也可以透過使用值 none
完全停用 Spring Boot 的日誌配置。
由於日誌記錄在 ApplicationContext 建立之前初始化,因此無法透過 Spring @Configuration 檔案中的 @PropertySources 控制日誌記錄。更改日誌系統或完全停用它的唯一方法是透過 System properties。 |
根據你的日誌系統,會載入以下檔案
日誌系統 | 定製 |
---|---|
Logback |
|
Log4j2 |
|
JDK (Java Util Logging) |
|
如果可能,我們建議你對日誌配置使用 -spring 變體(例如,使用 logback-spring.xml 而不是 logback.xml )。如果你使用標準配置位置,Spring 無法完全控制日誌初始化。 |
Java Util Logging 存在已知的類載入問題,在從“可執行 jar”執行時會導致問題。如果可能,我們建議你在從“可執行 jar”執行時避免使用它。 |
為了幫助定製,一些其他屬性從 Spring Environment
轉移到 System properties。這使得日誌系統配置可以消費這些屬性。例如,在 application.properties
中設定 logging.file.name
或將 LOGGING_FILE_NAME
設定為環境變數,將導致 LOG_FILE
系統屬性被設定。轉移的屬性如下表所示
Spring Environment | System Property | 註釋 |
---|---|---|
|
|
記錄異常時使用的轉換詞。 |
|
|
如果定義,將在預設日誌配置中使用。 |
|
|
如果定義,將在預設日誌配置中使用。 |
|
|
在控制檯 (stdout) 上使用的日誌模式。 |
|
|
日誌日期格式的 Appender 模式。 |
|
|
控制檯日誌記錄使用的字元集。 |
|
|
控制檯日誌記錄使用的日誌級別閾值。 |
|
|
在檔案中使用的日誌模式(如果 |
|
|
檔案日誌記錄使用的字元集(如果 |
|
|
檔案日誌記錄使用的日誌級別閾值。 |
|
|
渲染日誌級別時使用的格式(預設 |
|
|
控制檯日誌記錄使用的結構化日誌格式。 |
|
|
檔案日誌記錄使用的結構化日誌格式。 |
|
|
當前程序 ID(如果可能則發現,並且在未作為 OS 環境變數定義時)。 |
如果你使用 Logback,也會轉移以下屬性
Spring Environment | System Property | 註釋 |
---|---|---|
|
|
輪轉日誌檔名的模式(預設 |
|
|
啟動時是否清理歸檔日誌檔案。 |
|
|
最大日誌檔案大小。 |
|
|
保留的日誌備份總大小。 |
|
|
保留的歸檔日誌檔案最大數量。 |
所有支援的日誌系統在解析其配置檔案時都可以參考 System properties。請參閱 spring-boot.jar
中的預設配置示例
如果你想在日誌屬性中使用佔位符,應該使用 Spring Boot 的語法,而不是底層框架的語法。特別是,如果你使用 Logback,你應該使用 |
你可以透過僅覆蓋
|
結構化日誌記錄
結構化日誌記錄是一種將日誌輸出寫入定義明確、通常機器可讀的格式的技術。Spring Boot 支援結構化日誌記錄,並開箱即用支援以下 JSON 格式
要啟用結構化日誌記錄,請將屬性 logging.structured.format.console
(用於控制檯輸出)或 logging.structured.format.file
(用於檔案輸出)設定為你要使用的格式 ID。
如果你正在使用自定義日誌配置,請更新你的配置以遵循 CONSOLE_LOG_STRUCTURED_FORMAT
和 FILE_LOG_STRUCTURED_FORMAT
系統屬性。以 CONSOLE_LOG_STRUCTURED_FORMAT
為例
-
Logback
-
Log4j2
<!-- replace your encoder with StructuredLogEncoder -->
<encoder class="org.springframework.boot.logging.logback.StructuredLogEncoder">
<format>${CONSOLE_LOG_STRUCTURED_FORMAT}</format>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
你也可以參考 Spring Boot 中包含的預設配置
<!-- replace your PatternLayout with StructuredLogLayout -->
<StructuredLogLayout format="${sys:CONSOLE_LOG_STRUCTURED_FORMAT}" charset="${sys:CONSOLE_LOG_CHARSET}"/>
你也可以參考 Spring Boot 中包含的預設配置
Elastic Common Schema
Elastic Common Schema 是一種基於 JSON 的日誌格式。
要啟用 Elastic Common Schema 日誌格式,請將相應的 format
屬性設定為 ecs
-
Properties
-
YAML
logging.structured.format.console=ecs
logging.structured.format.file=ecs
logging:
structured:
format:
console: ecs
file: ecs
日誌行看起來像這樣
{"@timestamp":"2024-01-01T10:15:00.067462556Z","log.level":"INFO","process.pid":39599,"process.thread.name":"main","service.name":"simple","log.logger":"org.example.Application","message":"No active profile set, falling back to 1 default profile: \"default\"","ecs.version":"8.11"}
此格式還會將 MDC 中包含的每個鍵值對新增到 JSON 物件。你也可以使用SLF4J 流式日誌 API 透過 addKeyValue 方法將鍵值對新增到日誌 JSON 物件中。
可以使用 logging.structured.ecs.service
屬性自定義 service
值
-
Properties
-
YAML
logging.structured.ecs.service.name=MyService
logging.structured.ecs.service.version=1
logging.structured.ecs.service.environment=Production
logging.structured.ecs.service.node-name=Primary
logging:
structured:
ecs:
service:
name: MyService
version: 1.0
environment: Production
node-name: Primary
如果未指定 logging.structured.ecs.service.name ,則預設為 spring.application.name 。 |
如果未指定 logging.structured.ecs.service.version ,則預設為 spring.application.version 。 |
Graylog Extended Log Format (GELF)
Graylog Extended Log Format 是一種基於 JSON 的日誌格式,用於 Graylog 日誌分析平臺。
要啟用 Graylog Extended Log Format,請將相應的 format
屬性設定為 gelf
-
Properties
-
YAML
logging.structured.format.console=gelf
logging.structured.format.file=gelf
logging:
structured:
format:
console: gelf
file: gelf
日誌行看起來像這樣
{"version":"1.1","short_message":"No active profile set, falling back to 1 default profile: \"default\"","timestamp":1725958035.857,"level":6,"_level_name":"INFO","_process_pid":47649,"_process_thread_name":"main","_log_logger":"org.example.Application"}
此格式還會將 MDC 中包含的每個鍵值對新增到 JSON 物件。你也可以使用SLF4J 流式日誌 API 透過 addKeyValue 方法將鍵值對新增到日誌 JSON 物件中。
可以使用 logging.structured.gelf
屬性自定義一些欄位
-
Properties
-
YAML
logging.structured.gelf.host=MyService
logging.structured.gelf.service.version=1
logging:
structured:
gelf:
host: MyService
service:
version: 1.0
如果未指定 logging.structured.gelf.host ,則預設為 spring.application.name 。 |
如果未指定 logging.structured.gelf.service.version ,則預設為 spring.application.version 。 |
Logstash JSON 格式
的 Logstash JSON 格式 是一個基於 JSON 的日誌格式。
要啟用 Logstash JSON 日誌格式,請將相應的 format
屬性設定為 logstash
-
Properties
-
YAML
logging.structured.format.console=logstash
logging.structured.format.file=logstash
logging:
structured:
format:
console: logstash
file: logstash
日誌行看起來像這樣
{"@timestamp":"2024-01-01T10:15:00.111037681+02:00","@version":"1","message":"No active profile set, falling back to 1 default profile: \"default\"","logger_name":"org.example.Application","thread_name":"main","level":"INFO","level_value":20000}
此格式還會將 MDC 中包含的每個鍵值對新增到 JSON 物件。你也可以使用SLF4J 流式日誌 API 透過 addKeyValue 方法將鍵值對新增到日誌 JSON 物件中。
如果你新增 標記,它們將以一個 tags
字串陣列的形式出現在 JSON 中。
自定義結構化日誌 JSON
Spring Boot 會為結構化日誌輸出的 JSON 名稱和值選擇合理的預設值。然而,有時你可能需要根據自己的需求對 JSON 進行一些微調。例如,你可能想要更改某些名稱以匹配你的日誌攝取系統的預期。你可能還想過濾掉某些成員,因為你覺得它們沒用。
以下屬性允許你更改結構化日誌 JSON 的寫入方式
屬性 | 描述 |
---|---|
|
從 JSON 中過濾掉特定路徑 |
|
重新命名 JSON 中的特定成員 |
|
向 JSON 中新增額外的成員 |
例如,以下設定將排除 log.level
,將 process.id
重新命名為 procid
,並新增一個固定的 corpname
欄位
-
Properties
-
YAML
logging.structured.json.exclude=log.level
logging.structured.json.rename.process.id=procid
logging.structured.json.add.corpname=mycorp
logging:
structured:
json:
exclude: log.level
rename:
process.id: procid
add:
corpname: mycorp
對於更高階的自定義,你可以編寫自己的類來實現 StructuredLoggingJsonMembersCustomizer 介面,並使用 logging.structured.json.customizer 屬性宣告它。你還可以透過將實現列在 META-INF/spring.factories 檔案中來宣告它們。 |
支援其他結構化日誌格式
Spring Boot 中的結構化日誌支援是可擴充套件的,允許你定義自己的自定義格式。為此,請實現 StructuredLogFormatter
介面。使用 Logback 時,泛型型別引數必須是 ILoggingEvent
;使用 Log4j2 時,必須是 LogEvent
(這意味著你的實現與特定的日誌系統繫結)。然後,你的實現將透過日誌事件被呼叫,並返回要記錄的 String
,如本例所示
-
Java
-
Kotlin
import ch.qos.logback.classic.spi.ILoggingEvent;
import org.springframework.boot.logging.structured.StructuredLogFormatter;
class MyCustomFormat implements StructuredLogFormatter<ILoggingEvent> {
@Override
public String format(ILoggingEvent event) {
return "time=" + event.getInstant() + " level=" + event.getLevel() + " message=" + event.getMessage() + "\n";
}
}
import ch.qos.logback.classic.spi.ILoggingEvent
import org.springframework.boot.logging.structured.StructuredLogFormatter
class MyCustomFormat : StructuredLogFormatter<ILoggingEvent> {
override fun format(event: ILoggingEvent): String {
return "time=${event.instant} level=${event.level} message=${event.message}\n"
}
}
如示例所示,你可以返回任何格式,不一定非要是 JSON。
要啟用你的自定義格式,請將屬性 logging.structured.format.console
或 logging.structured.format.file
設定為你實現的完全限定類名。
你的實現可以使用一些建構函式引數,這些引數會自動注入。更多詳細資訊,請參閱 StructuredLogFormatter
的 JavaDoc。
Logback 擴充套件
Spring Boot 包含一些 Logback 擴充套件,可以幫助進行高階配置。你可以在 logback-spring.xml
配置檔案中使用這些擴充套件。
由於標準的 logback.xml 配置檔案載入得太早,你無法在其中使用擴充套件。你需要使用 logback-spring.xml 或定義一個 logging.config 屬性。 |
這些擴充套件不能與 Logback 的配置掃描一起使用。如果你嘗試這樣做,更改配置檔案會導致記錄類似於以下內容之一的錯誤 |
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
特定配置檔案的配置
<springProfile>
標籤允許你根據活躍的 Spring profiles 選擇性地包含或排除配置部分。Profile 部分可以在 <configuration>
元素內的任何地方使用。使用 name
屬性指定哪個 profile 接受該配置。staging
)或 profile 表示式。Profile 表示式允許表達更復雜的 profile 邏輯,例如 production & (eu-central | eu-west)
。更多詳細資訊,請查閱 Spring Framework 參考指南。以下列表顯示了三個示例 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>
環境屬性
<springProperty>
標籤允許你從 Spring Environment
中暴露屬性供 Logback 使用。如果你想在 Logback 配置中訪問 application.properties
檔案中的值,這樣做會很有用。該標籤的工作方式類似於 Logback 標準的 <property>
標籤。然而,與其指定直接的 value
,你指定屬性的 source
(來自 Environment
)。如果你需要將屬性儲存在 local
範圍之外的地方,可以使用 scope
屬性。如果你需要一個備用值(以防屬性在 Environment
中未設定),可以使用 defaultValue
屬性。以下示例展示瞭如何在 Logback 中暴露屬性供使用
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>
source 必須以 kebab-case 形式指定(例如 my.property-name )。然而,可以使用寬鬆規則將屬性新增到 Environment 中。 |
Log4j2 擴充套件
Spring Boot 包含一些 Log4j2 擴充套件,可以幫助進行高階配置。你可以在任何 log4j2-spring.xml
配置檔案中使用這些擴充套件。
由於標準的 log4j2.xml 配置檔案載入得太早,你無法在其中使用擴充套件。你需要使用 log4j2-spring.xml 或定義一個 logging.config 屬性。 |
這些擴充套件取代了 Log4J 提供的 Spring Boot 支援。你應該確保在構建中不包含 org.apache.logging.log4j:log4j-spring-boot 模組。 |
特定配置檔案的配置
<SpringProfile>
標籤允許你根據活躍的 Spring profiles 選擇性地包含或排除配置部分。Profile 部分可以在 <Configuration>
元素內的任何地方使用。使用 name
屬性指定哪個 profile 接受該配置。staging
)或 profile 表示式。Profile 表示式允許表達更復雜的 profile 邏輯,例如 production & (eu-central | eu-west)
。更多詳細資訊,請查閱 Spring Framework 參考指南。以下列表顯示了三個示例 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>
環境屬性查詢
如果你想在 Log4j2 配置中引用 Spring Environment
中的屬性,可以使用帶有 spring:
字首的查詢。如果你想在 Log4j2 配置中訪問 application.properties
檔案中的值,這樣做會很有用。
以下示例展示瞭如何設定名為 applicationName
和 applicationGroup
的 Log4j2 屬性,它們從 Spring Environment
讀取 spring.application.name
和 spring.application.group
<Properties>
<Property name="applicationName">${spring:spring.application.name}</Property>
<Property name="applicationGroup">${spring:spring.application.group}</Property>
</Properties>
查詢鍵應以 kebab-case 形式指定(例如 my.property-name )。 |
Log4j2 系統屬性
Log4j2 支援許多系統屬性,可用於配置各種項。例如,log4j2.skipJansi
系統屬性可用於配置 ConsoleAppender
是否會在 Windows 上嘗試使用 Jansi 輸出流。
Log4j2 初始化後加載的所有系統屬性都可以從 Spring Environment
中獲取。例如,你可以在 application.properties
檔案中新增 log4j2.skipJansi=false
,以便 ConsoleAppender
在 Windows 上使用 Jansi。
只有當系統屬性和作業系統環境變數不包含要載入的值時,才會考慮 Spring Environment 。 |
Log4j2 早期初始化期間載入的系統屬性無法引用 Spring Environment 。例如,Log4j2 用於選擇預設 Log4j2 實現的屬性在使用時,Spring Environment 尚未可用。 |