此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Boot 3.5.5! |
Logging
Spring Boot 将 Commons Logging 用于所有内部日志记录,但使底层日志实现保持打开状态。 为 Java Util Logging、Log4j2 和 Logback 提供了默认配置。 在每种情况下,记录器都预先配置为使用控制台输出,也提供可选的文件输出。
默认情况下,如果您使用Starters,则使用 Logback 进行日志记录。 还包括适当的 Logback 路由,以确保使用 Java Util Logging、Commons Logging、Log4J 或 SLF4J 的依赖库都能正常工作。
有很多可用于 Java 的日志框架。 如果上面的列表看起来令人困惑,请不要担心。 通常,您不需要更改日志记录依赖项,并且 Spring Boot 默认值工作正常。 |
将应用程序部署到 Servlet 容器或应用程序服务器时,使用 Java Util Logging API 执行的日志记录不会路由到应用程序的日志中。 这可以防止容器或已部署到它的其他应用程序执行的日志记录出现在应用程序的日志中。 |
日志格式
Spring Boot 的默认日志输出类似于以下示例:
2025-08-23T07:03:49.071Z INFO 90127 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : Starting MyApplication using Java 17.0.16 with PID 90127 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2025-08-23T07:03:49.082Z INFO 90127 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : No active profile set, falling back to 1 default profile: "default"
2025-08-23T07:03:51.779Z INFO 90127 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-08-23T07:03:51.828Z INFO 90127 --- [myapp] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-08-23T07:03:51.829Z INFO 90127 --- [myapp] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.44]
2025-08-23T07:03:51.966Z INFO 90127 --- [myapp] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-08-23T07:03:51.968Z INFO 90127 --- [myapp] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2679 ms
2025-08-23T07:03:53.005Z INFO 90127 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2025-08-23T07:03:53.050Z INFO 90127 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : Started MyApplication in 5.43 seconds (process running for 6.538)
2025-08-23T07:03:53.093Z INFO 90127 --- [myapp] [ionShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete
2025-08-23T07:03:53.109Z INFO 90127 --- [myapp] [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete
输出以下项目:
-
日期和时间:毫秒级精度,易于排序。
-
日志级别:
ERROR
,WARN
,INFO
,DEBUG
或TRACE
. -
进程 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
-level 和INFO
-level 消息。
您还可以通过使用--debug
旗。
$ java -jar myapp.jar --debug
您还可以指定debug=true 在你的application.properties . |
启用调试模式后,将配置一系列核心记录器(嵌入式容器、Hibernate 和 Spring Boot)以输出更多信息。
启用调试模式不会将应用程序配置为记录所有消息DEBUG
水平。
或者,您可以通过使用--trace
标志(或trace=true
在你的application.properties
).
这样做可以为选择的核心记录器(嵌入式容器,Hibernate模式生成和整个Spring产品组合)启用跟踪日志记录。
颜色编码输出
如果您的终端支持 ANSI,则使用颜色输出来帮助提高可读性。
您可以设置spring.output.ansi.enabled
设置为支持的值以覆盖自动检测。
颜色编码是通过使用%clr
转换词。
在最简单的形式中,转换器根据对数级别为输出着色,如以下示例所示:
%clr(%5p)
下表描述了日志级别到颜色的映射:
水平 | 颜色 |
---|---|
|
红 |
|
红 |
|
黄色 |
|
绿 |
|
绿 |
|
绿 |
或者,您可以通过将其作为转换选项提供来指定应使用的颜色或样式。 例如,要使文本变黄,请使用以下设置:
%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}){yellow}
支持以下颜色和样式:
-
blue
-
cyan
-
faint
-
green
-
magenta
-
red
-
yellow
文件输出
默认情况下,Spring Boot 仅记录到控制台,不写入日志文件。
如果除了控制台输出之外还想写日志文件,则需要设置一个logging.file.name
或logging.file.path
属性(例如,在application.properties
).
如果同时设置了这两个属性,logging.file.path
被忽略,只有logging.file.name
被使用。
下表显示了如何logging.*
属性可以一起使用:
logging.file.name |
logging.file.path |
描述 |
---|---|---|
(无) |
(无) |
仅控制台日志记录。 |
特定文件(例如 |
(无) |
写入 |
(无) |
特定目录(例如 |
写 |
特定文件 |
特定目录 |
写入 |
日志文件在达到 10 MB 时轮换,与控制台输出一样,ERROR
-水平WARN
-level 和INFO
默认情况下,记录 -level 消息。
日志记录属性独立于实际日志记录基础结构。
因此,特定的配置键(例如logback.configurationFile 对于 Logback),不是由 spring Boot 管理。 |
文件轮换
如果您使用的是 Logback,则可以使用application.properties
或application.yaml
文件。
对于所有其他日志记录系统,您需要直接自己配置轮换设置(例如,如果您使用 Log4j2,则可以添加一个log4j2.xml
或log4j2-spring.xml
文件)。
支持以下轮换策略属性:
名称 | 描述 |
---|---|
|
用于创建日志存档的文件名模式。 |
|
如果应用程序启动时应进行日志存档清理。 |
|
存档前日志文件的最大大小。 |
|
日志存档在被删除之前可以占用的最大大小。 |
|
要保留的最大存档日志文件数(默认为 7)。 |
日志级别
所有受支持的日志记录系统都可以在 Spring 中设置记录器级别Environment
(例如,在application.properties
) 使用logging.level.<logger-name>=<level>
哪里level
是 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 或 OFF 之一。
这root
记录器可以通过使用logging.level.root
.
以下示例显示了application.properties
:
-
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=DEBUG
将设置org.springframework.web
自DEBUG
.
上述方法仅适用于包级日志记录。
由于宽松绑定总是将环境变量转换为小写,因此无法以这种方式为单个类配置日志记录。
如果需要为类配置日志记录,可以使用这SPRING_APPLICATION_JSON 变量。 |
日志组
能够将相关的记录器组合在一起以便可以同时配置它们通常很有用。 例如,您可能通常会更改所有与 Tomcat 相关的记录器的日志记录级别,但您无法轻松记住顶级包。
为了帮助解决这个问题,Spring Boot 允许您在 Spring 中定义日志记录组Environment
.
例如,下面是如何通过将“tomcat”组添加到application.properties
:
-
Properties
-
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"
定义后,您可以使用一行更改组中所有记录器的级别:
-
Properties
-
YAML
logging.level.tomcat=trace
logging:
level:
tomcat: "trace"
Spring Boot 包括以下预定义的日志记录组,这些日志记录组可以开箱即用:
名称 | Logging |
---|---|
Web |
|
SQL的 |
|
使用日志关闭挂钩
为了在应用程序终止时释放日志资源,提供了一个关闭钩子,该钩子将在 JVM 退出时触发日志系统清理。
除非您的应用程序部署为 war 文件,否则此关闭挂钩会自动注册。
如果您的应用程序具有复杂的上下文层次结构,则关闭挂钩可能无法满足您的需求。
如果没有,请禁用关闭挂钩并调查底层日志记录系统直接提供的选项。
例如,Logback 提供了上下文选择器,允许在自己的上下文中创建每个 Logger。
您可以使用logging.register-shutdown-hook
属性来禁用关闭钩子。
将其设置为false
将禁用注册。
您可以在application.properties
或application.yaml
文件:
-
Properties
-
YAML
logging.register-shutdown-hook=false
logging:
register-shutdown-hook: false
自定义日志配置
可以通过在类路径上包含适当的库来激活各种日志记录系统,并且可以通过在类路径的根目录或下一个 Spring 指定的位置提供合适的配置文件来进一步自定义Environment
财产:logging.config
.
您可以使用org.springframework.boot.logging.LoggingSystem
系统属性。
该值应是LoggingSystem
实现。
您还可以使用none
.
由于日志记录是在ApplicationContext 创建时,无法控制日志记录@PropertySources 在Spring@Configuration 文件。
更改日志记录系统或完全禁用它的唯一方法是通过系统属性。 |
根据日志记录系统,将加载以下文件:
测井系统 | 定制 |
---|---|
返回 |
|
日志4j2 |
|
JDK(Java Util 日志记录) |
|
如果可能,我们建议您使用-spring 变体(例如,logback-spring.xml 而不是logback.xml ). 如果使用标准配置位置,Spring 无法完全控制日志初始化。 |
Java Util Logging 存在已知的类加载问题,这些问题会导致从“可执行 jar”运行时出现问题。如果可能的话,我们建议您在从“可执行 jar”运行时避免它。 |
为了帮助自定义,一些其他属性是从 Spring 转移的Environment
到系统属性。这允许通过记录系统配置来使用属性。例如,将logging.file.name
在application.properties
或LOGGING_FILE_NAME
作为环境变量将导致LOG_FILE
正在设置的系统属性。下表介绍了传输的属性:
弹簧环境 | 系统属性 | 评论 |
---|---|---|
|
|
记录异常时使用的转换字。 |
|
|
如果已定义,则在默认日志配置中使用。 |
|
|
如果已定义,则在默认日志配置中使用。 |
|
|
要在控制台 (stdout) 上使用的日志模式。 |
|
|
日志日期格式的附加器模式。 |
|
|
用于控制台日志记录的字符集。 |
|
|
用于控制台日志记录的日志级别阈值。 |
|
|
要在文件中使用的日志模式(如果 |
|
|
用于文件日志记录的字符集(如果 |
|
|
用于文件日志记录的日志级别阈值。 |
|
|
渲染日志级别时要使用的格式(默认 |
|
|
用于控制台日志记录的结构化日志记录格式。 |
|
|
用于文件日志记录的结构化日志记录格式。 |
|
|
当前进程 ID(如果可能,则发现,并且尚未定义为 OS 环境变量)。 |
如果您使用 Logback,则还会传输以下属性:
弹簧环境 | 系统属性 | 评论 |
---|---|---|
|
|
滚动日志文件名的模式(默认 |
|
|
是否在启动时清理存档日志文件。 |
|
|
最大日志文件大小。 |
|
|
要保留的日志备份的总大小。 |
|
|
要保留的最大存档日志文件数。 |
所有受支持的日志记录系统都可以在解析其配置文件时查阅系统属性。
请参阅中的默认配置spring-boot.jar
例如:
如果要在日志记录属性中使用占位符,则应使用 Spring Boot 的语法,而不是底层框架的语法。
值得注意的是,如果您使用 Logback,您应该使用 |
您可以通过仅覆盖
|
结构化日志记录
结构化日志记录是一种以定义明确、通常机器可读的格式编写日志输出的技术。 Spring Boot 支持结构化日志记录,并支持以下开箱即用的 JSON 格式:
若要启用结构化日志记录,请将属性logging.structured.format.console
(用于控制台输出)或logging.structured.format.file
(用于文件输出)设置为要使用的格式的 ID。
如果您使用的是自定义日志配置,请更新您的配置以遵循CONSOLE_LOG_STRUCTURED_FORMAT
和FILE_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 是一种基于 JSON 的日志记录格式。
要启用 Elastic Common Schema 日志格式,请设置适当的format
属性设置为ecs
:
-
Properties
-
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
性能:
-
Properties
-
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
:
-
Properties
-
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
性能:
-
Properties
-
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
:
-
Properties
-
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
string 数组。
自定义结构化日志记录 JSON
Spring Boot 尝试为结构化日志记录的 JSON 名称和值输出选择合理的默认值。但是,有时您可能希望根据自己的需要对 JSON 进行小幅调整。例如,您可能想要更改某些名称以符合日志摄取系统的期望。您可能还想过滤掉某些成员,因为您发现它们没有用。
以下属性允许您更改结构化日志记录 JSON 的编写方式:
属性 | 描述 |
---|---|
|
从 JSON 中筛选特定路径 |
|
重命名 JSON 中的特定成员 |
|
向 JSON 添加其他成员 |
例如,以下内容将排除log.level
重命名process.id
自procid
并添加固定的corpname
田:
-
Properties
-
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 输出中都会包含完整的堆栈跟踪。 日志引入系统处理此信息量的成本可能很高,因此您可能需要调整堆栈跟踪的打印方式。
为此,您可以使用以下一个或多个属性:
属性 | 描述 |
---|---|
|
用 |
|
应打印的最大长度 |
|
每个堆栈跟踪要打印的最大帧数(包括公共帧和抑制帧) |
|
是否应包含或删除公共帧 |
|
如果应包含堆栈跟踪的哈希 |
例如,以下内容将使用根优先堆栈跟踪,限制其长度,并包含哈希。
-
Properties
-
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
如果您需要完全控制堆栈跟踪打印,您可以将 你 |
支持其他结构化日志记录格式
Spring Boot 中的结构化日志支持是可扩展的,允许您定义自己的自定义格式。
为此,请实现StructuredLogFormatter
接口。泛型类型参数必须是ILoggingEvent
使用 Logback 和LogEvent
使用 Log4j2 时(这意味着您的实现与特定的日志记录系统相关联)。
然后,使用日志事件调用您的实现,并返回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.console
或logging.structured.format.file
设置为实现的完全限定类名。
您的实现可以使用一些自动注入的构造函数参数。
请参阅 JavaDocStructuredLogFormatter
了解更多详情。
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。
如果您想从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 必须在烤肉串大小写中指定(例如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>
环境属性查找
如果您想引用 Spring 中的属性Environment
在您的 Log4j2 配置中,您可以使用spring:
前缀查找。如果您想从application.properties
文件。
以下示例显示如何设置名为applicationName
和applicationGroup
那读着spring.application.name
和spring.application.group
从Spring开始Environment
:
<Properties>
<Property name="applicationName">${spring:spring.application.name}</Property>
<Property name="applicationGroup">${spring:spring.application.group}</Property>
</Properties>
查找键应在烤肉串大小写中指定(例如my.property-name ). |
Log4j2 系统属性
Log4j2 支持许多可用于配置各种项目的系统属性。例如,log4j2.skipJansi
system 属性可用于配置ConsoleAppender
将尝试在 Windows 上使用 Jansi 输出流。
Log4j2初始化后加载的所有系统属性都可以从SpringEnvironment
. 例如,您可以添加log4j2.skipJansi=false
给你的application.properties
文件以拥有ConsoleAppender
在 Windows 上使用 Jansi。
SpringEnvironment 仅当系统属性和作系统环境变量不包含正在加载的值时才考虑。 |
在早期 Log4j2 初始化期间加载的系统属性不能引用 SpringEnvironment . 例如,在 Spring 环境可用之前,使用了 Log4j2 用于允许选择默认 Log4j2 实现的属性。 |