日志记录

Spring Boot 使用 Commons Logging 进行所有内部日志记录,但底层日志实现是开放的。为 Java Util LoggingLog4j2Logback 提供了默认配置。在每种情况下,日志记录器都预配置为使用控制台输出,并且还提供可选的文件输出。

默认情况下,如果您使用启动器,Logback 用于日志记录。还包括适当的 Logback 路由,以确保使用 Java Util Logging、Commons Logging、Log4J 或 SLF4J 的依赖库都能正常工作。

Java 有很多可用的日志框架。如果上面的列表看起来令人困惑,请不要担心。通常,您不需要更改日志依赖项,并且 Spring Boot 的默认设置工作得很好。
当您将应用程序部署到 servlet 容器或应用程序服务器时,使用 Java Util Logging API 执行的日志记录不会路由到应用程序的日志中。这可以防止容器或部署到其中的其他应用程序执行的日志记录出现在您的应用程序日志中。

日志格式

Spring Boot 的默认日志输出类似于以下示例

2025-11-20T16:37:12.913Z  INFO 127185 --- [myapp] [           main] o.s.b.d.f.logexample.MyApplication       : Starting MyApplication using Java 25.0.1 with PID 127185 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2025-11-20T16:37:12.925Z  INFO 127185 --- [myapp] [           main] o.s.b.d.f.logexample.MyApplication       : No active profile set, falling back to 1 default profile: "default"
2025-11-20T16:37:15.953Z  INFO 127185 --- [myapp] [           main] o.s.boot.tomcat.TomcatWebServer          : Tomcat initialized with port 8080 (http)
2025-11-20T16:37:16.031Z  INFO 127185 --- [myapp] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-11-20T16:37:16.032Z  INFO 127185 --- [myapp] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/11.0.14]
2025-11-20T16:37:16.171Z  INFO 127185 --- [myapp] [           main] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 2989 ms
2025-11-20T16:37:17.526Z  INFO 127185 --- [myapp] [           main] o.s.boot.tomcat.TomcatWebServer          : Tomcat started on port 8080 (http) with context path '/'
2025-11-20T16:37:17.570Z  INFO 127185 --- [myapp] [           main] o.s.b.d.f.logexample.MyApplication       : Started MyApplication in 6.187 seconds (process running for 7.574)
2025-11-20T16:37:17.605Z  INFO 127185 --- [myapp] [ionShutdownHook] o.s.boot.tomcat.GracefulShutdown         : Commencing graceful shutdown. Waiting for active requests to complete
2025-11-20T16:37:17.664Z  INFO 127185 --- [myapp] [tomcat-shutdown] o.s.boot.tomcat.GracefulShutdown         : Graceful shutdown complete

输出以下项目

  • 日期和时间:毫秒精度,易于排序。

  • 日志级别:ERRORWARNINFODEBUGTRACE

  • 进程 ID。

  • 一个 --- 分隔符,用于区分实际日志消息的开始。

  • 应用程序名称:用方括号括起来(默认情况下仅在设置 spring.application.name 时记录)

  • 应用程序组:用方括号括起来(默认情况下仅在设置 spring.application.group 时记录)

  • 线程名称:用方括号括起来(对于控制台输出可能会被截断)。

  • 关联 ID:如果启用了跟踪(未在上述示例中显示)

  • 日志记录器名称:这通常是源类名称(通常缩写)。

  • 日志消息。

Logback 没有 FATAL 级别。它映射到 ERROR
如果您有 spring.application.name 属性但不想记录它,您可以将 logging.include-application-name 设置为 false
如果您有 spring.application.group 属性但不想记录它,您可以将 logging.include-application-group 设置为 false
有关关联 ID 的更多详细信息,请参阅此文档

控制台输出

默认日志配置会将在消息写入时回显到控制台。默认情况下,会记录 ERROR 级别、WARN 级别和 INFO 级别的消息。您还可以通过使用 --debug 标志启动应用程序来启用“调试”模式。

$ java -jar myapp.jar --debug
您还可以在 application.properties 中指定 debug=true

当启用调试模式时,会配置一些核心日志记录器(嵌入式容器、Hibernate 和 Spring Boot)以输出更多信息。启用调试模式不会将您的应用程序配置为以 DEBUG 级别记录所有消息。

或者,您可以通过使用 --trace 标志(或在 application.properties 中使用 trace=true)启动应用程序来启用“跟踪”模式。这样做会为一些核心日志记录器(嵌入式容器、Hibernate 模式生成和整个 Spring 组合)启用跟踪日志记录。

如果您想禁用基于控制台的日志记录,可以将 logging.console.enabled 属性设置为 false

彩色输出

如果您的终端支持 ANSI,则使用颜色输出以帮助提高可读性。您可以将 spring.output.ansi.enabled 设置为支持的值来覆盖自动检测。

颜色编码通过使用 %clr 转换词进行配置。以最简单的形式,转换器根据日志级别对输出进行着色,如以下示例所示

%clr(%5p)

下表描述了日志级别到颜色的映射

级别 颜色

FATAL

红色

ERROR

红色

WARN

黄色

INFO

绿色

DEBUG

绿色

TRACE

绿色

或者,您可以通过在转换中提供颜色或样式作为选项来指定要使用的颜色或样式。例如,要使文本变为黄色,请使用以下设置

%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}){yellow}

支持以下颜色和样式

  • 蓝色

  • 青色

  • 微弱

  • 绿色

  • 洋红色

  • 红色

  • 黄色

文件输出

默认情况下,Spring Boot 只记录到控制台,不写入日志文件。除了控制台输出外,如果您想写入日志文件,则需要设置 logging.file.namelogging.file.path 属性(例如,在您的 application.properties 中)。如果同时设置了这两个属性,则忽略 logging.file.path,只使用 logging.file.name

下表显示了如何将 logging.* 属性一起使用

表1. 日志记录属性
logging.file.name logging.file.path 描述

(无)

(无)

仅控制台日志记录。

特定文件(例如,my.log

(无)

写入 logging.file.name 指定的位置。该位置可以是绝对路径或相对于当前目录的路径。

(无)

特定目录(例如,/var/log

spring.log 写入 logging.file.path 指定的目录。该目录可以是绝对路径或相对于当前目录的路径。

特定文件

特定目录

写入 logging.file.name 指定的位置,并忽略 logging.file.path。该位置可以是绝对路径或相对于当前目录的路径。

日志文件在达到 10 MB 时轮换,并且与控制台输出一样,默认情况下会记录 ERROR 级别、WARN 级别和 INFO 级别的消息。

日志记录属性独立于实际的日志记录基础设施。因此,特定配置键(例如 Logback 的 logback.configurationFile)不受 Spring Boot 管理。

文件轮换

如果您正在使用 Logback,则可以使用 application.propertiesapplication.yaml 文件微调日志轮换设置。对于所有其他日志系统,您需要自行直接配置轮换设置(例如,如果您使用 Log4j2,则可以添加 log4j2.xmllog4j2-spring.xml 文件)。

支持以下轮换策略属性

名称 描述

logging.logback.rollingpolicy.file-name-pattern

用于创建日志归档的文件名模式。

logging.logback.rollingpolicy.clean-history-on-start

应用程序启动时是否应清理日志归档。

logging.logback.rollingpolicy.max-file-size

日志文件在归档前的最大大小。

logging.logback.rollingpolicy.total-size-cap

日志归档在删除前可占用的最大总大小。

logging.logback.rollingpolicy.max-history

要保留的归档日志文件的最大数量(默认为 7)。

日志级别

所有受支持的日志系统都可以在 Spring Environment 中设置日志级别(例如,在 application.properties 中),使用 logging.level.<logger-name>=<level>,其中 level 是 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 或 OFF 中的一个。可以使用 logging.level.root 配置 root 日志记录器。

以下示例显示了 application.properties 中可能的日志设置

  • 属性

  • YAML

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
logging:
  level:
    root: "warn"
    org.springframework.web: "debug"
    org.hibernate: "error"

也可以使用环境变量设置日志级别。例如,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUGorg.springframework.web 设置为 DEBUG

上述方法仅适用于包级别的日志记录。由于松弛绑定总是将环境变量转换为小写,因此无法以这种方式为单个类配置日志记录。如果需要为类配置日志记录,可以使用SPRING_APPLICATION_JSON变量。

日志组

将相关日志记录器分组以便可以同时配置它们通常很有用。例如,您可能经常更改所有 Tomcat 相关日志记录器的日志级别,但您无法轻易记住顶级包。

为了解决这个问题,Spring Boot 允许您在 Spring Environment 中定义日志组。例如,这是您如何通过将其添加到 application.properties 来定义“tomcat”组的方法

  • 属性

  • YAML

logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
logging:
  group:
    tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat"

一旦定义,您可以通过一行代码更改组中所有日志记录器的级别

  • 属性

  • YAML

logging.level.tomcat=trace
logging:
  level:
    tomcat: "trace"

Spring Boot 包含以下预定义的日志记录组,可直接使用

名称 日志器

web

org.springframework.core.codecorg.springframework.httporg.springframework.weborg.springframework.boot.actuate.endpoint.weborg.springframework.boot.web.servlet.ServletContextInitializerBeans

sql

org.springframework.jdbc.core, org.hibernate.SQL, LoggerListener

使用日志关闭钩子

为了在应用程序终止时释放日志记录资源,Spring Boot 提供了一个关闭钩子,当 JVM 退出时会触发日志系统清理。除非您的应用程序作为 war 文件部署,否则此关闭钩子会自动注册。如果您的应用程序具有复杂的上下文层次结构,则关闭钩子可能无法满足您的需求。如果不能,请禁用关闭钩子并调查底层日志系统直接提供的选项。例如,Logback 提供了上下文选择器,允许在自己的上下文中创建每个日志记录器。您可以使用 logging.register-shutdown-hook 属性来禁用关闭钩子。将其设置为 false 将禁用注册。您可以在 application.propertiesapplication.yaml 文件中设置该属性

  • 属性

  • YAML

logging.register-shutdown-hook=false
logging:
  register-shutdown-hook: false

自定义日志配置

各种日志系统可以通过在 classpath 中包含相应的库来激活,并且可以通过在 classpath 的根目录或由以下 Spring Environment 属性指定的位置提供合适的配置文件来进一步自定义:logging.config

您可以使用 org.springframework.boot.logging.LoggingSystem 系统属性强制 Spring Boot 使用特定的日志系统。该值应该是 LoggingSystem 实现的完全限定类名。您还可以通过使用值 none 来完全禁用 Spring Boot 的日志配置。

由于日志记录是在 ApplicationContext 创建之前初始化的,因此无法从 Spring @Configuration 文件中的 @PropertySources 控制日志记录。更改日志系统或完全禁用它的唯一方法是通过系统属性。

根据您的日志系统,将加载以下文件

日志系统 自定义

Logback

logback-spring.xml, logback-spring.groovy, logback.xml, 或 logback.groovy

Log4j2

log4j2-spring.xmllog4j2.xml

JDK (Java Util Logging)

logging.properties

如果可能,我们建议您为日志配置使用 -spring 变体(例如,logback-spring.xml 而不是 logback.xml)。如果您使用标准配置位置,Spring 无法完全控制日志初始化。
Java Util Logging 存在已知的类加载问题,这在从“可执行 jar”运行时会导致问题。我们建议您在从“可执行 jar”运行时尽可能避免使用它。

为了帮助定制,一些其他属性从 Spring Environment 转移到系统属性。这允许日志系统配置使用这些属性。例如,在 application.properties 中设置 logging.file.name 或将 LOGGING_FILE_NAME 作为环境变量,将导致设置 LOG_FILE 系统属性。下表描述了转移的属性

Spring Environment 系统属性 评论

logging.exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

记录异常时使用的转换词。

logging.file.name

LOG_FILE

如果已定义,则在默认日志配置中使用。

logging.file.path

LOG_PATH

如果已定义,则在默认日志配置中使用。

logging.pattern.console

CONSOLE_LOG_PATTERN

在控制台(stdout)上使用的日志模式。

logging.pattern.dateformat

LOG_DATEFORMAT_PATTERN

日志日期格式的附加程序模式。

logging.charset.console

CONSOLE_LOG_CHARSET

控制台日志记录使用的字符集。

logging.threshold.console

CONSOLE_LOG_THRESHOLD

控制台日志记录使用的日志级别阈值。

logging.pattern.file

FILE_LOG_PATTERN

在文件中使用的日志模式(如果启用了 LOG_FILE)。

logging.charset.file

FILE_LOG_CHARSET

文件日志记录使用的字符集(如果启用了 LOG_FILE)。

logging.threshold.file

FILE_LOG_THRESHOLD

文件日志记录使用的日志级别阈值。

logging.pattern.level

LOG_LEVEL_PATTERN

渲染日志级别时使用的格式(默认 %5p)。

logging.structured.format.console

CONSOLE_LOG_STRUCTURED_FORMAT

用于控制台日志记录的结构化日志格式。

logging.structured.format.file

FILE_LOG_STRUCTURED_FORMAT

用于文件日志记录的结构化日志格式。

PID

PID

当前进程 ID(如果可能且未定义为操作系统环境变量,则发现)。

如果您使用 Logback,还会传输以下属性

Spring Environment 系统属性 评论

logging.logback.rollingpolicy.file-name-pattern

LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN

翻转日志文件名的模式(默认 ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz)。

logging.logback.rollingpolicy.clean-history-on-start

LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START

启动时是否清理归档日志文件。

logging.logback.rollingpolicy.max-file-size

LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE

最大日志文件大小。

logging.logback.rollingpolicy.total-size-cap

LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP

要保留的日志备份的总大小。

logging.logback.rollingpolicy.max-history

LOGBACK_ROLLINGPOLICY_MAX_HISTORY

要保留的归档日志文件的最大数量。

所有支持的日志系统在解析其配置文件时都可以查询系统属性。有关示例,请参阅 spring-boot.jar 中的默认配置

如果您想在日志属性中使用占位符,您应该使用 Spring Boot 的语法,而不是底层框架的语法。值得注意的是,如果您使用 Logback,您应该使用 : 作为属性名及其默认值之间的分隔符,而不是使用 :-

您可以通过仅覆盖 LOG_LEVEL_PATTERN(或 Logback 的 logging.pattern.level)将 MDC 和其他临时内容添加到日志行。例如,如果您使用 logging.pattern.level=user:%X{user} %5p,则默认日志格式包含一个用于“user”的 MDC 条目(如果存在),如以下示例所示。

2019-08-30 12:30:04.031 user:someone INFO 22174 --- [  nio-8080-exec-0] demo.Controller
Handling authenticated request

结构化日志

结构化日志是一种将日志输出写入定义明确、通常可机器读取的格式的技术。Spring Boot 支持结构化日志,并开箱即用地支持以下 JSON 格式

要启用结构化日志,请将属性 logging.structured.format.console(用于控制台输出)或 logging.structured.format.file(用于文件输出)设置为您要使用的格式的 ID。

如果您正在使用自定义日志配置,请更新您的配置以遵循 CONSOLE_LOG_STRUCTURED_FORMATFILE_LOG_STRUCTURED_FORMAT 系统属性。以 CONSOLE_LOG_STRUCTURED_FORMAT 为例

  • Logback

  • Log4j2

<!-- replace your encoder with StructuredLogEncoder -->
<encoder class="org.springframework.boot.logging.logback.StructuredLogEncoder">
	<format>${CONSOLE_LOG_STRUCTURED_FORMAT}</format>
	<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>

您还可以参考 Spring Boot 中包含的默认配置

<!-- replace your PatternLayout with StructuredLogLayout -->
<StructuredLogLayout format="${sys:CONSOLE_LOG_STRUCTURED_FORMAT}" charset="${sys:CONSOLE_LOG_CHARSET}"/>

您还可以参考 Spring Boot 中包含的默认配置

Elastic Common Schema

Elastic Common Schema 是一种基于 JSON 的日志格式。

要启用 Elastic Common Schema 日志格式,请将相应的 format 属性设置为 ecs

  • 属性

  • YAML

logging.structured.format.console=ecs
logging.structured.format.file=ecs
logging:
  structured:
    format:
      console: ecs
      file: ecs

日志行如下所示

{"@timestamp":"2024-01-01T10:15:00.067462556Z","log":{"level":"INFO","logger":"org.example.Application"},"process":{"pid":39599,"thread":{"name":"main"}},"service":{"name":"simple"},"message":"No active profile set, falling back to 1 default profile: \"default\"","ecs":{"version":"8.11"}}

此格式还会将 MDC 中包含的每个键值对添加到 JSON 对象中。您还可以使用 SLF4J 流式日志 API 通过 addKeyValue 方法将键值对添加到记录的 JSON 对象中。

service 值可以使用 logging.structured.ecs.service 属性进行自定义

  • 属性

  • YAML

logging.structured.ecs.service.name=MyService
logging.structured.ecs.service.version=1
logging.structured.ecs.service.environment=Production
logging.structured.ecs.service.node-name=Primary
logging:
  structured:
    ecs:
      service:
        name: MyService
        version: 1.0
        environment: Production
        node-name: Primary
如果未指定,logging.structured.ecs.service.name 将默认为 spring.application.name
如果未指定,logging.structured.ecs.service.version 将默认为 spring.application.version

Graylog 扩展日志格式 (GELF)

Graylog 扩展日志格式 是一种用于 Graylog 日志分析平台的基于 JSON 的日志格式。

要启用 Graylog 扩展日志格式,请将相应的 format 属性设置为 gelf

  • 属性

  • YAML

logging.structured.format.console=gelf
logging.structured.format.file=gelf
logging:
  structured:
    format:
      console: gelf
      file: gelf

日志行如下所示

{"version":"1.1","short_message":"No active profile set, falling back to 1 default profile: \"default\"","timestamp":1725958035.857,"level":6,"_level_name":"INFO","_process_pid":47649,"_process_thread_name":"main","_log_logger":"org.example.Application"}

此格式还会将 MDC 中包含的每个键值对添加到 JSON 对象中。您还可以使用 SLF4J 流式日志 API 通过 addKeyValue 方法将键值对添加到记录的 JSON 对象中。

可以使用 logging.structured.gelf 属性自定义多个字段

  • 属性

  • YAML

logging.structured.gelf.host=MyService
logging.structured.gelf.service.version=1
logging:
  structured:
    gelf:
      host: MyService
      service:
        version: 1.0
如果未指定,logging.structured.gelf.host 将默认为 spring.application.name
如果未指定,logging.structured.gelf.service.version 将默认为 spring.application.version

Logstash JSON 格式

Logstash JSON 格式 是一种基于 JSON 的日志格式。

要启用 Logstash JSON 日志格式,请将相应的 format 属性设置为 logstash

  • 属性

  • YAML

logging.structured.format.console=logstash
logging.structured.format.file=logstash
logging:
  structured:
    format:
      console: logstash
      file: logstash

日志行如下所示

{"@timestamp":"2024-01-01T10:15:00.111037681+02:00","@version":"1","message":"No active profile set, falling back to 1 default profile: \"default\"","logger_name":"org.example.Application","thread_name":"main","level":"INFO","level_value":20000}

此格式还会将 MDC 中包含的每个键值对添加到 JSON 对象中。您还可以使用 SLF4J 流式日志 API 通过 addKeyValue 方法将键值对添加到记录的 JSON 对象中。

如果您添加 标记,它们将以 tags 字符串数组的形式出现在 JSON 中。

自定义结构化日志 JSON

Spring Boot 尝试为结构化日志输出的 JSON 名称和值选择合理的默认值。然而,有时您可能希望根据自己的需要对 JSON 进行微调。例如,您可能希望更改某些名称以匹配您的日志摄取系统的期望。您也可能希望过滤掉某些成员,因为您觉得它们没有用。

以下属性允许您更改结构化日志 JSON 的写入方式

财产 描述

logging.structured.json.include & logging.structured.json.exclude

从 JSON 中过滤特定路径

logging.structured.json.rename

重命名 JSON 中的特定成员

logging.structured.json.add

向 JSON 添加额外成员

例如,以下将排除 log.level,将 process.id 重命名为 procid,并添加一个固定的 corpname 字段

  • 属性

  • YAML

logging.structured.json.exclude=log.level
logging.structured.json.rename.process.id=procid
logging.structured.json.add.corpname=mycorp
logging:
  structured:
    json:
      exclude: log.level
      rename:
        process.id: procid
      add:
        corpname: mycorp
对于更高级的自定义,您可以使用 StructuredLoggingJsonMembersCustomizer 接口。您可以使用 logging.structured.json.customizer 属性引用一个或多个实现。您还可以通过在 META-INF/spring.factories 文件中列出它们来声明实现。

自定义结构化日志堆栈跟踪

当消息与异常一起记录时,完整的堆栈跟踪将包含在 JSON 输出中。这些信息量可能对您的日志摄取系统处理起来代价高昂,因此您可能希望调整堆栈跟踪的打印方式。

为此,您可以使用以下一个或多个属性

财产 描述

logging.structured.json.stacktrace.root

使用 last 最后打印根项(与 Java 相同)或 first 首先打印根项。

logging.structured.json.stacktrace.max-length

应打印的最大长度

logging.structured.json.stacktrace.max-throwable-depth

每个堆栈跟踪(包括常见帧和抑制帧)要打印的最大帧数

logging.structured.json.stacktrace.include-common-frames

是否应包含或删除常见帧

logging.structured.json.stacktrace.include-hashes

是否应包含堆栈跟踪的哈希值

例如,以下将使用根优先的堆栈跟踪,限制其长度,并包含哈希值。

  • 属性

  • YAML

logging.structured.json.stacktrace.root=first
logging.structured.json.stacktrace.max-length=1024
logging.structured.json.stacktrace.include-common-frames=true
logging.structured.json.stacktrace.include-hashes=true
logging:
  structured:
    json:
      stacktrace:
        root: first
        max-length: 1024
        include-common-frames: true
        include-hashes: true

如果您需要完全控制堆栈跟踪打印,可以将 logging.structured.json.stacktrace.printer 设置为 StackTracePrinter 实现的名称。您还可以将其设置为 logging-system 以强制使用常规日志系统堆栈跟踪输出。

您的 StackTracePrinter 实现还可以包含一个构造函数参数,该参数接受 StandardStackTracePrinter,如果它希望对从属性创建的堆栈跟踪打印机应用进一步的自定义。

支持其他结构化日志格式

Spring Boot 中的结构化日志支持是可扩展的,允许您定义自己的自定义格式。为此,请实现 StructuredLogFormatter 接口。泛型类型参数在使用 Logback 时必须是 ILoggingEvent,在使用 Log4j2 时必须是 LogEvent(这意味着您的实现与特定的日志系统相关联)。然后,您的实现将使用日志事件调用,并返回要记录的 String,如以下示例所示

  • Java

  • Kotlin

import ch.qos.logback.classic.spi.ILoggingEvent;

import org.springframework.boot.logging.structured.StructuredLogFormatter;

class MyCustomFormat implements StructuredLogFormatter<ILoggingEvent> {

	@Override
	public String format(ILoggingEvent event) {
		return "time=" + event.getInstant() + " level=" + event.getLevel() + " message=" + event.getMessage() + "\n";
	}

}
import ch.qos.logback.classic.spi.ILoggingEvent
import org.springframework.boot.logging.structured.StructuredLogFormatter

class MyCustomFormat : StructuredLogFormatter<ILoggingEvent> {

	override fun format(event: ILoggingEvent): String {
		return "time=${event.instant} level=${event.level} message=${event.message}\n"
	}

}

如您在示例中看到的,您可以返回任何格式,不一定是 JSON。

要启用您的自定义格式,请将属性 logging.structured.format.consolelogging.structured.format.file 设置为您的实现的完全限定类名。

您的实现可以使用一些构造函数参数,这些参数会自动注入。有关更多详细信息,请参阅 StructuredLogFormatter 的 JavaDoc。

Logback 扩展

Spring Boot 包含许多 Logback 扩展,可以帮助进行高级配置。您可以在 logback-spring.xml 配置文件中使用这些扩展。

由于标准 logback.xml 配置文件加载过早,您无法在其中使用扩展。您需要使用 logback-spring.xml 或定义 logging.config 属性。
这些扩展不能与 Logback 的 配置扫描 一起使用。如果您尝试这样做,更改配置文件会导致记录类似于以下错误之一
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]

特定于配置文件的配置

<springProfile> 标签允许您根据活动的 Spring 配置文件有选择地包含或排除配置部分。配置文件部分在 <configuration> 元素内的任何位置都受支持。使用 name 属性指定哪个配置文件接受配置。<springProfile> 标签可以包含配置文件名称(例如 staging)或配置文件表达式。配置文件表达式允许表达更复杂的配置文件逻辑,例如 production & (eu-central | eu-west)。有关更多详细信息,请查看 Spring Framework 参考指南。以下列表显示了三个示例配置文件

<springProfile name="staging">
	<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev | staging">
	<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
	<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

环境属性

<springProperty> 标签允许您公开 Spring Environment 中的属性,以便在 Logback 中使用。如果您希望在 Logback 配置中访问 application.properties 文件中的值,这会很有用。该标签的工作方式与 Logback 的标准 <property> 标签类似。但是,您不是指定直接的 value,而是指定属性的 source(来自 Environment)。如果您需要将属性存储在 local 范围以外的位置,可以使用 scope 属性。如果您需要一个备用值(以防属性未在 Environment 中设置),可以使用 defaultValue 属性。以下示例显示了如何在 Logback 中公开属性

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
		defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
	<remoteHost>${fluentHost}</remoteHost>
	...
</appender>
source 必须以 kebab-case 格式指定(例如 my.property-name)。但是,属性可以通过松散规则添加到 Environment 中。

Log4j2 扩展

Spring Boot 包含一些 Log4j2 扩展,可以帮助进行高级配置。您可以在任何 log4j2-spring.xml 配置文件中使用这些扩展。

由于标准 log4j2.xml 配置文件加载过早,因此您不能在其中使用扩展。您需要使用 log4j2-spring.xml 或定义 logging.config 属性。
这些扩展取代了 Log4J 提供的 Spring Boot 支持。您应该确保在构建中不包含 org.apache.logging.log4j:log4j-spring-boot 模块。

配置文件特定配置

<SpringProfile> 标签允许您根据活动的 Spring 配置文件选择性地包含或排除配置部分。配置文件部分在 <Configuration> 元素内的任何位置都受支持。使用 name 属性指定哪个配置文件接受配置。<SpringProfile> 标签可以包含配置文件名称(例如 staging)或配置文件表达式。配置文件表达式允许表达更复杂的配置文件逻辑,例如 production & (eu-central | eu-west)。有关更多详细信息,请查看 Spring Framework 参考指南。以下列表显示了三个示例配置文件

<SpringProfile name="staging">
	<!-- configuration to be enabled when the "staging" profile is active -->
</SpringProfile>

<SpringProfile name="dev | staging">
	<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</SpringProfile>

<SpringProfile name="!production">
	<!-- configuration to be enabled when the "production" profile is not active -->
</SpringProfile>

环境属性查找

如果您希望在 Log4j2 配置中引用 Spring Environment 中的属性,可以使用带有 spring: 前缀的查找。如果您希望在 Log4j2 配置中访问 application.properties 文件中的值,这会很有用。

以下示例展示了如何设置名为 applicationNameapplicationGroup 的 Log4j2 属性,它们从 Spring Environment 中读取 spring.application.namespring.application.group

<Properties>
	<Property name="applicationName">${spring:spring.application.name}</Property>
	<Property name="applicationGroup">${spring:spring.application.group}</Property>
</Properties>
查找键应以 kebab-case 格式指定(例如 my.property-name)。

Log4j2 系统属性

Log4j2 支持许多系统属性,可用于配置各种项目。例如,log4j2.skipJansi 系统属性可用于配置 ConsoleAppender 是否会在 Windows 上尝试使用 Jansi 输出流。

所有在 Log4j2 初始化后加载的系统属性都可以从 Spring Environment 中获取。例如,您可以将 log4j2.skipJansi=false 添加到您的 application.properties 文件中,以便 ConsoleAppender 在 Windows 上使用 Jansi。

只有当系统属性和操作系统环境变量不包含正在加载的值时,才会考虑 Spring Environment
在 Log4j2 早期初始化期间加载的系统属性不能引用 Spring Environment。例如,Log4j2 用于允许选择默认 Log4j2 实现的属性在 Spring Environment 可用之前使用。
© . This site is unofficial and not affiliated with VMware.