|
如需获取最新稳定版本,请使用 Spring Boot 4.0.4! |
日志记录
Spring Boot 没有强制性的日志依赖,除了 Commons Logging API,它通常由 Spring Framework 的 spring-jcl 模块提供。
要使用 Logback,你需要将其和 spring-jcl 包含在类路径中。
推荐的方式是通过 starters,它们都依赖于 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 中进行设置,如下例所示:
-
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 配置,你可以在自己的配置中通过 included 引用它们。
这些引入旨在允许重新应用某些常见的 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 中,如下例所示:
-
Properties
-
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 覆盖配置文件的位置可以加上 |