日志
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-05-26T18:13:09.716+08:00 INFO 40487 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : Starting MyApplication using Java 21.0.7 with PID 40487 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2025-05-26T18:13:09.718+08:00 INFO 40487 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : No active profile set, falling back to 1 default profile: "default"
2025-05-26T18:13:10.347+08:00 INFO 40487 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-05-26T18:13:10.359+08:00 INFO 40487 --- [myapp] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-05-26T18:13:10.359+08:00 INFO 40487 --- [myapp] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.41]
2025-05-26T18:13:10.408+08:00 INFO 40487 --- [myapp] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-05-26T18:13:10.411+08:00 INFO 40487 --- [myapp] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 656 ms
2025-05-26T18:13:10.722+08:00 INFO 40487 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2025-05-26T18:13:10.728+08:00 INFO 40487 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : Started MyApplication in 1.48 seconds (process running for 1.752)
2025-05-26T18:13:10.731+08:00 INFO 40487 --- [myapp] [ionShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to 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
级别和 INFO
级别的消息。
你还可以通过使用 --debug
标志启动应用程序来启用"debug"模式。
$ java -jar myapp.jar --debug
你也可以在 application.properties 中指定 debug=true 。
|
启用调试模式时,会配置一组核心记录器(嵌入式容器、Hibernate 和 Spring Boot)以输出更多信息。
启用调试模式并_不会_配置你的应用程序以 DEBUG
级别记录所有消息。
或者,你可以通过使用 --trace
标志(或在 application.properties
中设置 trace=true
)启动应用程序来启用"trace"模式。
这样做会为一组核心记录器(嵌入式容器、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
级别和 INFO
级别的消息。
日志属性与实际日志基础设施无关。
因此,Spring Boot 不管理特定的配置键(例如 Logback 的 logback.configurationFile )。
|
文件轮转
如果你使用 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 之一。
可以通过使用 logging.level.root
来配置 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
中定义日志组。
例如,以下是如何通过将其添加到 application.properties
来定义"`tomcat`"组:
-
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 包含以下预定义的日志组,可以直接使用:
名称 | 记录器 |
---|---|
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
系统属性强制 Spring Boot 使用特定的日志系统。
该值应该是 LoggingSystem
实现的完全限定类名。
你还可以通过使用值 none
完全禁用 Spring Boot 的日志配置。
由于日志记录是在创建 ApplicationContext *之前*初始化的,因此无法从 Spring @Configuration 文件中的 @PropertySources 控制日志记录。
更改日志系统或完全禁用它只能通过系统属性来实现。
|
根据你的日志系统,加载以下文件:
日志系统 | 自定义 |
---|---|
Logback |
|
Log4j2 |
|
JDK (Java Util Logging) |
|
如果可能,我们建议你使用日志配置的 -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 | 系统属性 | 注释 |
---|---|---|
|
|
记录异常时使用的转换字。 |
|
|
如果定义,则在默认日志配置中使用。 |
|
|
如果定义,则在默认日志配置中使用。 |
|
|
在控制台(stdout)上使用的日志模式。 |
|
|
日志日期格式的追加器模式。 |
|
|
用于控制台日志记录的字符集。 |
|
|
用于控制台日志记录的日志级别阈值。 |
|
|
在文件中使用的日志模式(如果启用了 |
|
|
用于文件日志记录的字符集(如果启用了 |
|
|
用于文件日志记录的日志级别阈值。 |
|
|
渲染日志级别时使用的格式(默认为 |
|
|
用于控制台日志记录的结构化日志格式。 |
|
|
用于文件日志记录的结构化日志格式。 |
|
|
当前进程 ID(如果可能且尚未定义为 OS 环境变量,则会被发现)。 |
如果你使用 Logback,还会传输以下属性:
Spring Environment | 系统属性 | 注释 |
---|---|---|
|
|
轮转日志文件名的模式(默认为 |
|
|
是否在启动时清理归档日志文件。 |
|
|
最大日志文件大小。 |
|
|
要保留的日志备份的总大小。 |
|
|
要保留的归档日志文件的最大数量。 |
所有支持的日志系统在解析其配置文件时都可以查询系统属性。
有关示例,请参阅 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
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 fluent logging API 通过 addKeyValue 方法将键值对添加到记录的 JSON 对象中。
可以使用 logging.structured.ecs.service
属性自定义 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 Extended Log Format (GELF)
Graylog Extended Log Format 是 Graylog 日志分析平台的基于 JSON 的日志格式。
要启用 Graylog Extended Log Format,请将相应的 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 fluent logging 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 fluent logging API 通过 addKeyValue 方法将键值对添加到记录的 JSON 对象中。
如果你添加 markers,这些将显示在 JSON 的 tags
字符串数组中。
自定义结构化日志 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
接口。使用 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.console
或 logging.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 profiles 选择性地包含或排除配置部分。
配置文件部分在 <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 profiles 选择性地包含或排除配置部分。
配置文件部分在 <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:
前缀的 lookups。
如果你想在 Log4j2 配置中访问 application.properties
文件中的值,这很有用。
以下示例显示了如何设置名为 applicationName
和 applicationGroup
的 Log4j2 属性,这些属性从 Spring Environment
中读取 spring.application.name
和 spring.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
中获取。
例如,你可以在 application.properties
文件中添加 log4j2.skipJansi=false
,以使 ConsoleAppender
在 Windows 上使用 Jansi。
仅当系统属性和操作系统环境变量不包含正在加载的值时,才会考虑 Spring Environment 。
|
在 Log4j2 早期初始化期间加载的系统属性不能引用 Spring Environment 。
例如,Log4j2 用于选择默认 Log4j2 实现的属性在 Spring Environment 可用之前就被使用了。
|