76. Logging
除了 Commons Logging API 以外,Spring Boot 没有强制性的日志记录依赖关系,Common Logging API 有很多实现可供选择。要使用Logback,您需要在 Classpath 上包括Logback和jcl-over-slf4j
(它实现了 Commons Logging API)。最简单的方法是通过都依赖spring-boot-starter-logging
的启动器。对于 Web 应用程序,您只需要spring-boot-starter-web
,因为它暂时取决于日志记录启动器。例如,使用 Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring Boot 具有LoggingSystem
抽象,该抽象试图基于 Classpath 的内容配置日志记录。如果 Logback 可用,则是首选。
如果您需要对日志记录进行的唯一更改是设置各种 Logger 的级别,则可以使用“ logging.level”前缀在application.properties
中进行设置,例如
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
您也可以使用“ logging.file”设置文件的位置(除控制台外)以登录。
要配置日志记录系统的更细粒度的设置,您需要使用所讨论的LoggingSystem
支持的本机配置格式。默认情况下,Spring Boot 从系统的默认位置(例如classpath:logback.xml
用于 Logback)中拾取本机配置,但是您可以使用“ logging.config”属性设置配置文件的位置。
76.1 配置用于记录的 Logback
如果您将logback.xml
放在 Classpath 的根中,它将从那里被拾取(或logback-spring.xml
以利用 Boot 提供的模板功能)。 Spring Boot 提供了一个默认的基本配置,如果您只想设置级别,则可以包括该默认配置。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="DEBUG"/>
</configuration>
如果您在 spring-boot jar 中查看该base.xml
,您会发现它使用了一些有用的 System 属性,而LoggingSystem
会为您创建这些属性。这些是:
-
${PID}
当前的进程 ID。 -
如果在 Boot 的外部配置中设置了
logging.file
,则为${LOG_FILE}
。 -
${LOG_PATH}
(如果设置了logging.path
)(表示用于存放日志文件的目录)。 -
如果在 Boot 的外部配置中设置了
logging.exception-conversion-word
,则为${LOG_EXCEPTION_CONVERSION_WORD}
。
Spring Boot 还使用自定义的 Logback 转换器在控制台上(但不在日志文件中)提供了一些漂亮的 ANSI 颜色终端输出。有关详细信息,请参见默认的base.xml
配置。
如果 Groovy 在 Classpath 中,则您也应该能够使用logback.groovy
配置 Logback(如果存在,它将被赋予优先级)。
76.1.1 配置仅文件输出的登录
如果要禁用控制台日志记录并将输出仅写到一个文件,则需要一个自定义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
添加到application.properties
:
logging.file=myapplication.log
76.2 配置 Log4j 进行日志记录
如果 Spring Boot 在 Classpath 中,则支持Log4j 2进行日志记录配置。如果您使用启动器来组装依赖项,则意味着您必须排除 Logback,然后改为包含 log4j 2.如果您不使用启动器,则除了 Log4j 2 外,还需要提供jcl-over-slf4j
(至少)。
最简单的路径可能是通过启动器,即使它需要对排除项进行微调,例如。在 Maven:
<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>
Note
Log4jStarter 程序的使用将常见日志记录要求的依赖关系汇总在一起(例如,包括让 Tomcat 使用java.util.logging
,而使用 Log4j 2 配置输出)。有关更多详细信息,请参见 Actuator Log4j 2 示例,并查看实际操作。
76.2.1 使用 YAML 或 JSON 配置 Log4j 2
除了默认的 XML 配置格式外,Log4j 2 还支持 YAML 和 JSON 配置文件。要将 Log4j 2 配置为使用备用配置文件格式,请将适当的依赖项添加到 Classpath 中,并命名您的配置文件以匹配您选择的文件格式:
Format | Dependencies | File names |
---|---|---|
YAML | com.fasterxml.jackson.core:jackson-databind com.fasterxml.jackson.dataformat:jackson-dataformat-yaml | log4j2.yaml log4j2.yml |
JSON | com.fasterxml.jackson.core:jackson-databind | log4j2.json log4j2.jsn |