日誌記錄
Spring Boot 沒有強制的日誌依賴,除了 Commons Logging API,它通常由 Spring Framework 的 spring-jcl 模組提供。要使用 Logback,你需要將它和 spring-jcl 包含在類路徑中。推薦的方式是透過 Starter,它們都依賴於 spring-boot-starter-logging。對於 Web 應用程式,你只需要 spring-boot-starter-web,因為它間接依賴於日誌 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 配置,可以被 include 到你自己的配置中。這些包含旨在允許重新應用某些常見的 Spring Boot 約定。
以下檔案位於 org/springframework/boot/logging/logback/ 下
-
defaults.xml- 提供轉換規則、模式屬性和常見日誌記錄器配置。 -
console-appender.xml- 使用CONSOLE_LOG_PATTERN新增ConsoleAppender。 -
structured-console-appender.xml- 使用CONSOLE_LOG_STRUCTURED_FORMAT中的結構化日誌記錄新增ConsoleAppender。 -
file-appender.xml- 使用FILE_LOG_PATTERN和ROLLING_FILE_NAME_PATTERN新增一個帶有適當設定的RollingFileAppender。 -
structured-file-appender.xml- 使用ROLLING_FILE_NAME_PATTERN和FILE_LOG_STRUCTURED_FORMAT中的結構化日誌記錄新增一個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}:Boot 的外部配置中是否設定了logging.file.name。 -
${LOG_PATH}:Boot 的外部配置中是否設定了logging.file.path(表示日誌檔案所在的目錄)。 -
${LOG_EXCEPTION_CONVERSION_WORD}:Boot 的外部配置中是否設定了logging.exception-conversion-word。 -
${ROLLING_FILE_NAME_PATTERN}:Boot 的外部配置中是否設定了logging.pattern.rolling-file-name。
Spring Boot 還透過使用自定義的 Logback 轉換器在控制檯上提供漂亮的 ANSI 顏色終端輸出(但不在日誌檔案中)。有關示例,請參閱 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>
你還需要將 logging.file.name 新增到你的 application.properties 或 application.yaml 中,如以下示例所示:
-
屬性
-
YAML
logging.file.name=myapplication.log
logging:
file:
name: "myapplication.log"
配置 Log4j 進行日誌記錄
如果 Log4j 2 在類路徑上,Spring Boot 支援其進行日誌配置。如果你使用 Starter 來組裝依賴項,你必須排除 Logback,然後包含 Log4j 2。如果你不使用 Starter,除了 Log4j 2 之外,你還需要提供(至少)spring-jcl。
推薦的路徑是透過 Starter,儘管這需要一些調整。以下示例顯示瞭如何在 Maven 中設定 Starter:
<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 提供了幾種不同的方式來設定 Starter。一種方式是使用 模組替換。為此,宣告對 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 Starter 彙集了常見日誌記錄要求的依賴項(例如讓 Tomcat 使用 java.util.logging 但使用 Log4j 2 配置輸出)。 |
為了確保使用 java.util.logging 執行的除錯日誌記錄路由到 Log4j 2,請透過將 java.util.logging.manager 系統屬性設定為 org.apache.logging.log4j.jul.LogManager 來配置其 JDK 日誌介面卡。 |
使用 YAML 或 JSON 配置 Log4j 2
除了其預設的 XML 配置格式,Log4j 2 還支援 YAML 和 JSON 配置檔案。要配置 Log4j 2 使用替代配置檔案格式,請將適當的依賴項新增到類路徑,並將配置檔案命名為與你選擇的檔案格式匹配,如以下示例所示:
| 格式 | 依賴項 | 檔名 |
|---|---|---|
YAML |
|
|
JSON |
|
|
使用組合配置配置 Log4j 2
Log4j 2 支援將多個配置檔案組合成一個複合配置。要在 Spring Boot 中使用此支援,請使用一個或多個輔助配置檔案的位置配置 logging.log4j2.config.override。輔助配置檔案將與主配置合併,無論主配置的來源是 Spring Boot 的預設設定、標準位置(如 log4j.xml),還是由 logging.config 屬性配置的位置。
|
Log4j2 覆蓋配置檔案的位置可以字首為 |