日誌
Spring Boot 沒有強制性的日誌依賴,除了 Commons Logging API,它通常由 Spring Framework 的 spring-jcl
模組提供。要使用 Logback,你需要在類路徑中包含它和 spring-jcl
。推薦的方法是透過 Starter,所有 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 可用,它將是首選。
如果你只需更改日誌記錄器級別,可以使用 "logging.level" 字首在 application.properties
中進行設定,如下例所示
-
屬性
-
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 配置,這些配置可以 包含
在你自己的配置中。這些包含檔案旨在重新應用一些常見的 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 支援使用 Log4j 2 進行日誌配置。如果你使用 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 |
|
|