76. Logging

除了 Commons Logging API 以外,Spring Boot 没有强制性的日志记录依赖关系,Common Logging API 有很多实现可供选择。要使用Logback,您需要在 Classpath 上包括Logbackjcl-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 中,并命名您的配置文件以匹配您选择的文件格式:

FormatDependenciesFile names
YAMLcom.fasterxml.jackson.core:jackson-databind com.fasterxml.jackson.dataformat:jackson-dataformat-yamllog4j2.yaml log4j2.yml
JSONcom.fasterxml.jackson.core:jackson-databindlog4j2.json log4j2.jsn