Logging
Spring Boot 没有强制的日志记录依赖项,除了由 Spring Framework 的 spring-jcl
模块通常提供的 Commons Logging API。要使用 Logback,你需要在类路径上包含 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”前缀来实现,如下例所示:
logging: level: org.springframework.web: "debug" org.hibernate: "error"
你还可以使用 logging.file.name
设置将日志写入的文件的位置(除了控制台之外)。
要配置日志记录系统的更细粒度设置,你需要使用 LoggingSystem
支持的本机配置格式。默认情况下,Spring Boot 会从系统默认位置(例如 Logback 的 classpath:logback.xml
)选取本机配置,但是你可以使用 configprop:logging.config[] 属性设置配置文件的位置。
Configure Logback for Logging
如果你需要在 application.properties
能够实现的定制之外,对 Logback 应用定制,那么你需要添加一个标准的 Logback 配置文件。你可以将 logback.xml
文件添加到类路径根目录,以供 Logback 查找。如果你想使用 Spring Boot Logback extensions,也可以使用 logback-spring.xml
。
Logback 文档详细介绍了 dedicated section that covers configuration。 |
Spring Boot 提供了许多 Logback 配置,可在自己的配置中 included
。这些 include 旨在允许重新应用某些常见 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
。
另外,对于早期版本的 Spring Boot,提供了传统 base.xml
文件以便兼容。
典型的自定义 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 通过使用自定义 Logback 转换器还在控制台(但不在日志文件中)提供一些漂亮的 ANSI 彩色终端输出。请参阅 defaults.xml
配置中的 CONSOLE_LOG_PATTERN
以获取示例。
如果类路径中存在 Groovy,则您也应该能够使用 logback.groovy
配置 Logback。如果存在,则此设置将被优先考虑。
Groovy 配置不支持 Spring 扩展。将不会检测到任何 |
Configure Logback for File-only Output
如果您想要禁用控制台记录,而只将输出写入文件,则您需要一个自定义 logback-spring.xml
,该 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
:
logging: file: name: "myapplication.log"
Configure Log4j for Logging
如果类路径中存在 Log4j 2,Spring Boot 会为记录配置支持该类。如果您使用 starter 组装依赖项,则必须排除 Logback,然后 include 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 提供了几种不同的方法来设置启动器。一种方法是使用 module replacement
。要实现此目的,请声明对 Log4j 2 启动器的依赖,并告诉 Gradle 默认日志记录启动器的任何出现都应由 Log4j 2 启动器替换,如下例所示:
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 启动器将常见日志记录要求的依赖项整合在一起(例如让 Tomcat 使用 |
要确保使用 |
Use YAML or JSON to Configure Log4j 2
除了其默认的 XML 配置格式外,Log4j 2 还支持 YAML 和 JSON 配置文件。要配置 Log4j 2 以使用替代配置文件格式,请将适当的依赖项添加到类路径,并命名您的配置文件以匹配您选择的的文件格式,如下例所示:
Format | Dependencies | File names |
---|---|---|
YAML |
|
|
JSON |
|
|