記錄
Spring Boot 沒有強制性的記錄依賴項,除了 Commons Logging API,它通常由 Spring Framework 的 spring-jcl
模組提供。若要使用 Logback,您需要在類別路徑中包含它和 spring-jcl
。建議的方式是透過 starters,它們都依賴於 spring-boot-starter-logging
。對於網路應用程式,您只需要 spring-boot-starter-web
,因為它以傳遞方式依賴於 logging starter。如果您使用 Maven,以下依賴項會為您新增記錄功能
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring Boot 有一個 LoggingSystem
抽象層,它嘗試根據類別路徑的內容來組態記錄。如果 Logback 可用,它是首選。
如果您需要對記錄進行的唯一變更是設定各種記錄器的層級,您可以在 application.properties
中使用 "logging.level" 前綴來執行此操作,如下列範例所示
-
屬性
-
YAML
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
logging:
level:
org.springframework.web: "debug"
org.hibernate: "error"
您也可以使用 logging.file.name
設定要寫入記錄檔的位置(除了主控台之外)。
若要組態記錄系統更細微的設定,您需要使用相關 LoggingSystem
支援的原生組態格式。預設情況下,Spring Boot 會從系統的預設位置(例如 Logback 的 classpath:logback.xml
)選取原生組態,但您可以使用 logging.config
屬性設定組態檔的位置。
組態 Logback 以進行記錄
如果您需要對 logback 應用超出 application.properties
可以實現的自訂,您將需要新增標準 logback 組態檔。您可以將 logback.xml
檔案新增至類別路徑的根目錄,以便 logback 找到它。如果您想要使用 Spring Boot Logback 擴充功能,您也可以使用 logback-spring.xml
。
Logback 文件有一個 專門的章節,詳細介紹了組態。 |
Spring Boot 提供了許多 logback 組態,可以 included
在您自己的組態中。這些包含旨在允許重新應用某些常見的 Spring Boot 慣例。
以下檔案在 org/springframework/boot/logging/logback/
下提供
-
defaults.xml
- 提供轉換規則、模式屬性和常見的記錄器組態。 -
console-appender.xml
- 使用CONSOLE_LOG_PATTERN
新增ConsoleAppender
。 -
file-appender.xml
- 使用FILE_LOG_PATTERN
和ROLLING_FILE_NAME_PATTERN
以及適當的設定新增RollingFileAppender
。
此外,還提供舊版的 base.xml
檔案,以便與舊版本的 Spring Boot 相容。
典型的自訂 logback.xml
檔案看起來會像這樣
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
<logger name="org.springframework.web" level="DEBUG"/>
</configuration>
您的 logback 組態檔也可以使用 LoggingSystem
負責為您建立的系統屬性
-
${PID}
:目前的程序 ID。 -
${LOG_FILE}
:logging.file.name
是否在 Boot 的外部組態中設定。 -
${LOG_PATH}
:logging.file.path
(代表記錄檔所在的目錄)是否在 Boot 的外部組態中設定。 -
${LOG_EXCEPTION_CONVERSION_WORD}
:logging.exception-conversion-word
是否在 Boot 的外部組態中設定。 -
${ROLLING_FILE_NAME_PATTERN}
:logging.pattern.rolling-file-name
是否在 Boot 的外部組態中設定。
Spring Boot 還在主控台上提供了一些美觀的 ANSI 彩色終端輸出(但不在記錄檔中),方法是使用自訂 Logback 轉換器。請參閱 defaults.xml
組態中的 CONSOLE_LOG_PATTERN
以取得範例。
如果 Groovy 在類別路徑上,您應該也可以使用 logback.groovy
組態 Logback。如果存在,此設定會優先。
Groovy 組態不支援 Spring 擴充功能。任何 logback-spring.groovy 檔案都不會被偵測到。 |
組態 Logback 以進行僅限檔案輸出
如果您想要停用主控台記錄並僅將輸出寫入檔案,您需要自訂 logback-spring.xml
,它匯入 file-appender.xml
但不匯入 console-appender.xml
,如下列範例所示
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
您也需要在您的 application.properties
或 application.yaml
中新增 logging.file.name
,如下列範例所示
-
屬性
-
YAML
logging.file.name=myapplication.log
logging:
file:
name: "myapplication.log"
組態 Log4j 以進行記錄
如果 Log4j 2 在類別路徑上,Spring Boot 支援使用它進行記錄組態。如果您使用 starters 來組裝依賴項,您必須排除 Logback,然後改為包含 Log4j 2。如果您不使用 starters,除了 Log4j 2 之外,您還需要提供(至少)spring-jcl
。
建議的路徑是透過 starters,即使它需要一些調整。以下範例顯示如何在 Maven 中設定 starters
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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>
Gradle 提供了幾種不同的方式來設定 starters。其中一種方式是使用 模組替換。若要執行此操作,請宣告 Log4j 2 starter 的依賴項,並告知 Gradle 預設記錄 starter 的任何出現都應替換為 Log4j 2 starter,如下列範例所示
dependencies {
implementation "org.springframework.boot:spring-boot-starter-log4j2"
modules {
module("org.springframework.boot:spring-boot-starter-logging") {
replacedBy("org.springframework.boot:spring-boot-starter-log4j2", "Use Log4j2 instead of Logback")
}
}
}
Log4j starters 將常見記錄需求的依賴項收集在一起(例如讓 Tomcat 使用 java.util.logging ,但使用 Log4j 2 組態輸出)。 |
為了確保使用 java.util.logging 執行的偵錯記錄路由到 Log4j 2,請設定其 JDK 記錄適配器,方法是將 java.util.logging.manager 系統屬性設定為 org.apache.logging.log4j.jul.LogManager 。 |
使用 YAML 或 JSON 組態 Log4j 2
除了預設的 XML 組態格式之外,Log4j 2 也支援 YAML 和 JSON 組態檔。若要組態 Log4j 2 以使用替代的組態檔格式,請將適當的依賴項新增至類別路徑,並將您的組態檔命名為符合您選擇的檔案格式,如下列範例所示
格式 | 依賴項 | 檔案名稱 |
---|---|---|
YAML |
|
|
JSON |
|
|