对于最新的稳定版本,请使用 Spring Boot 3.5.5spring-doc.cadn.net.cn

Logging

Spring Boot 将 Commons Logging 用于所有内部日志记录,但使底层日志实现保持打开状态。 为 Java Util LoggingLog4j2Logback 提供了默认配置。 在每种情况下,记录器都预先配置为使用控制台输出,也提供可选的文件输出。spring-doc.cadn.net.cn

默认情况下,如果您使用Starters,则使用 Logback 进行日志记录。 还包括适当的 Logback 路由,以确保使用 Java Util Logging、Commons Logging、Log4J 或 SLF4J 的依赖库都能正常工作。spring-doc.cadn.net.cn

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

日志格式

Spring Boot 的默认日志输出类似于以下示例:spring-doc.cadn.net.cn

2025-06-19T07:27:01.284Z  INFO 119738 --- [myapp] [           main] o.s.b.d.f.logexample.MyApplication       : Starting MyApplication using Java 17.0.15 with PID 119738 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2025-06-19T07:27:01.297Z  INFO 119738 --- [myapp] [           main] o.s.b.d.f.logexample.MyApplication       : No active profile set, falling back to 1 default profile: "default"
2025-06-19T07:27:05.130Z  INFO 119738 --- [myapp] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2025-06-19T07:27:05.210Z  INFO 119738 --- [myapp] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-06-19T07:27:05.214Z  INFO 119738 --- [myapp] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.42]
2025-06-19T07:27:05.555Z  INFO 119738 --- [myapp] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2025-06-19T07:27:05.566Z  INFO 119738 --- [myapp] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4083 ms
2025-06-19T07:27:07.415Z  INFO 119738 --- [myapp] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2025-06-19T07:27:07.456Z  INFO 119738 --- [myapp] [           main] o.s.b.d.f.logexample.MyApplication       : Started MyApplication in 7.718 seconds (process running for 8.821)

输出以下项目:spring-doc.cadn.net.cn

Logback 没有FATAL水平。 它映射到ERROR.
如果你有一个spring.application.name属性,但不想记录它,您可以设置logging.include-application-namefalse.

控制台输出

默认日志配置在写入消息时将消息回显到控制台。 默认情况下,ERROR-水平WARN-level 和INFO-level 消息。 您还可以通过使用--debug旗。spring-doc.cadn.net.cn

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

启用调试模式后,将配置一系列核心记录器(嵌入式容器、Hibernate 和 Spring Boot)以输出更多信息。 启用调试模式不会将应用程序配置为记录所有消息DEBUG水平。spring-doc.cadn.net.cn

或者,您可以通过使用--trace标志(或trace=true在你的application.properties). 这样做可以为选择的核心记录器(嵌入式容器,Hibernate模式生成和整个Spring产品组合)启用跟踪日志记录。spring-doc.cadn.net.cn

颜色编码输出

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

颜色编码是通过使用%clr转换词。 在最简单的形式中,转换器根据对数级别为输出着色,如以下示例所示:spring-doc.cadn.net.cn

%clr(%5p)

下表描述了日志级别到颜色的映射:spring-doc.cadn.net.cn

水平 颜色

FATALspring-doc.cadn.net.cn

spring-doc.cadn.net.cn

ERRORspring-doc.cadn.net.cn

spring-doc.cadn.net.cn

WARNspring-doc.cadn.net.cn

黄色spring-doc.cadn.net.cn

INFOspring-doc.cadn.net.cn

绿spring-doc.cadn.net.cn

DEBUGspring-doc.cadn.net.cn

绿spring-doc.cadn.net.cn

TRACEspring-doc.cadn.net.cn

绿spring-doc.cadn.net.cn

或者,您可以通过将其作为转换选项提供来指定应使用的颜色或样式。 例如,要使文本变黄,请使用以下设置:spring-doc.cadn.net.cn

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

支持以下颜色和样式:spring-doc.cadn.net.cn

文件输出

默认情况下,Spring Boot 仅记录到控制台,不写入日志文件。 如果除了控制台输出之外还想写日志文件,则需要设置一个logging.file.namelogging.file.path属性(例如,在application.properties). 如果同时设置了这两个属性,logging.file.path被忽略,只有logging.file.name被使用。spring-doc.cadn.net.cn

下表显示了如何logging.*属性可以一起使用:spring-doc.cadn.net.cn

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

(无)spring-doc.cadn.net.cn

(无)spring-doc.cadn.net.cn

仅控制台日志记录。spring-doc.cadn.net.cn

特定文件(例如my.log)spring-doc.cadn.net.cn

(无)spring-doc.cadn.net.cn

写入logging.file.name. 位置可以是绝对位置,也可以是相对于当前目录的位置。spring-doc.cadn.net.cn

(无)spring-doc.cadn.net.cn

特定目录(例如/var/log)spring-doc.cadn.net.cn

spring.loglogging.file.path. 该目录可以是绝对目录,也可以是相对于当前目录的目录。spring-doc.cadn.net.cn

特定文件spring-doc.cadn.net.cn

特定目录spring-doc.cadn.net.cn

写入logging.file.name并忽略logging.file.path. 位置可以是绝对位置,也可以是相对于当前目录的位置。spring-doc.cadn.net.cn

日志文件在达到 10 MB 时轮换,与控制台输出一样,ERROR-水平WARN-level 和INFO默认情况下,记录 -level 消息。spring-doc.cadn.net.cn

日志记录属性独立于实际日志记录基础结构。 因此,特定的配置键(例如logback.configurationFile对于 Logback),不是由 spring Boot 管理。

文件轮换

如果您使用的是 Logback,则可以使用application.propertiesapplication.yaml文件。 对于所有其他日志记录系统,您需要直接自己配置轮换设置(例如,如果您使用 Log4j2,则可以添加一个log4j2.xmllog4j2-spring.xml文件)。spring-doc.cadn.net.cn

支持以下轮换策略属性:spring-doc.cadn.net.cn

名称 描述

logging.logback.rollingpolicy.file-name-patternspring-doc.cadn.net.cn

用于创建日志存档的文件名模式。spring-doc.cadn.net.cn

logging.logback.rollingpolicy.clean-history-on-startspring-doc.cadn.net.cn

如果应用程序启动时应进行日志存档清理。spring-doc.cadn.net.cn

logging.logback.rollingpolicy.max-file-sizespring-doc.cadn.net.cn

存档前日志文件的最大大小。spring-doc.cadn.net.cn

logging.logback.rollingpolicy.total-size-capspring-doc.cadn.net.cn

日志存档在被删除之前可以占用的最大大小。spring-doc.cadn.net.cn

logging.logback.rollingpolicy.max-historyspring-doc.cadn.net.cn

要保留的最大存档日志文件数(默认为 7)。spring-doc.cadn.net.cn

日志级别

所有受支持的日志记录系统都可以在 Spring 中设置记录器级别Environment(例如,在application.properties) 使用logging.level.<logger-name>=<level>哪里level是 TRACE、DEBUG、INFO、WARN、ERROR、FATAL 或 OFF 之一。 这root记录器可以通过使用logging.level.root.spring-doc.cadn.net.cn

以下示例显示了application.properties:spring-doc.cadn.net.cn

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.webDEBUG.spring-doc.cadn.net.cn

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

日志组

能够将相关的记录器组合在一起以便可以同时配置它们通常很有用。 例如,您可能通常会更改所有与 Tomcat 相关的记录器的日志记录级别,但您无法轻松记住顶级包。spring-doc.cadn.net.cn

为了帮助解决这个问题,Spring Boot 允许您在 Spring 中定义日志记录组Environment. 例如,下面是如何通过将“tomcat”组添加到application.properties:spring-doc.cadn.net.cn

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

定义后,您可以使用一行更改组中所有记录器的级别:spring-doc.cadn.net.cn

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

Spring Boot 包括以下预定义的日志记录组,这些日志记录组可以开箱即用:spring-doc.cadn.net.cn

名称 Logging

Webspring-doc.cadn.net.cn

org.springframework.core.codec,org.springframework.http,org.springframework.web,org.springframework.boot.actuate.endpoint.web,org.springframework.boot.web.servlet.ServletContextInitializerBeansspring-doc.cadn.net.cn

SQL的spring-doc.cadn.net.cn

org.springframework.jdbc.core,org.hibernate.SQL,LoggerListenerspring-doc.cadn.net.cn

使用日志关闭挂钩

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

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

自定义日志配置

可以通过在类路径上包含适当的库来激活各种日志记录系统,并且可以通过在类路径的根目录或下一个 Spring 指定的位置提供合适的配置文件来进一步自定义Environment财产:logging.config.spring-doc.cadn.net.cn

您可以使用org.springframework.boot.logging.LoggingSystem系统属性。 该值应是LoggingSystem实现。 您还可以使用none.spring-doc.cadn.net.cn

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

根据日志记录系统,将加载以下文件:spring-doc.cadn.net.cn

测井系统 定制

返回spring-doc.cadn.net.cn

logback-spring.xml,logback-spring.groovy,logback.xmllogback.groovyspring-doc.cadn.net.cn

日志4j2spring-doc.cadn.net.cn

log4j2-spring.xmllog4j2.xmlspring-doc.cadn.net.cn

JDK(Java Util 日志记录)spring-doc.cadn.net.cn

logging.propertiesspring-doc.cadn.net.cn

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

为了帮助自定义,一些其他属性是从 Spring 转移的Environment到系统属性。 这允许通过日志记录系统配置来使用属性。例如,将logging.file.nameapplication.propertiesLOGGING_FILE_NAME作为环境变量将导致LOG_FILE系统属性。 下表介绍了转移的属性:spring-doc.cadn.net.cn

弹簧环境 系统属性 评论

logging.exception-conversion-wordspring-doc.cadn.net.cn

LOG_EXCEPTION_CONVERSION_WORDspring-doc.cadn.net.cn

记录异常时使用的转换字。spring-doc.cadn.net.cn

logging.file.namespring-doc.cadn.net.cn

LOG_FILEspring-doc.cadn.net.cn

如果已定义,则在默认日志配置中使用。spring-doc.cadn.net.cn

logging.file.pathspring-doc.cadn.net.cn

LOG_PATHspring-doc.cadn.net.cn

如果已定义,则在默认日志配置中使用。spring-doc.cadn.net.cn

logging.pattern.consolespring-doc.cadn.net.cn

CONSOLE_LOG_PATTERNspring-doc.cadn.net.cn

要在控制台 (stdout) 上使用的日志模式。spring-doc.cadn.net.cn

logging.pattern.dateformatspring-doc.cadn.net.cn

LOG_DATEFORMAT_PATTERNspring-doc.cadn.net.cn

日志日期格式的附加器模式。spring-doc.cadn.net.cn

logging.charset.consolespring-doc.cadn.net.cn

CONSOLE_LOG_CHARSETspring-doc.cadn.net.cn

用于控制台日志记录的字符集。spring-doc.cadn.net.cn

logging.threshold.consolespring-doc.cadn.net.cn

CONSOLE_LOG_THRESHOLDspring-doc.cadn.net.cn

用于控制台日志记录的日志级别阈值。spring-doc.cadn.net.cn

logging.pattern.filespring-doc.cadn.net.cn

FILE_LOG_PATTERNspring-doc.cadn.net.cn

要在文件中使用的日志模式(如果LOG_FILE已启用)。spring-doc.cadn.net.cn

logging.charset.filespring-doc.cadn.net.cn

FILE_LOG_CHARSETspring-doc.cadn.net.cn

用于文件日志记录的字符集(如果LOG_FILE已启用)。spring-doc.cadn.net.cn

logging.threshold.filespring-doc.cadn.net.cn

FILE_LOG_THRESHOLDspring-doc.cadn.net.cn

用于文件日志记录的日志级别阈值。spring-doc.cadn.net.cn

logging.pattern.levelspring-doc.cadn.net.cn

LOG_LEVEL_PATTERNspring-doc.cadn.net.cn

渲染日志级别时要使用的格式(默认%5p).spring-doc.cadn.net.cn

PIDspring-doc.cadn.net.cn

PIDspring-doc.cadn.net.cn

当前进程 ID(如果可能,则发现,并且尚未定义为 OS 环境变量)。spring-doc.cadn.net.cn

如果您使用 Logback,则还会传输以下属性:spring-doc.cadn.net.cn

弹簧环境 系统属性 评论

logging.logback.rollingpolicy.file-name-patternspring-doc.cadn.net.cn

LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERNspring-doc.cadn.net.cn

滚动日志文件名的模式(默认${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz).spring-doc.cadn.net.cn

logging.logback.rollingpolicy.clean-history-on-startspring-doc.cadn.net.cn

LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_STARTspring-doc.cadn.net.cn

是否在启动时清理存档日志文件。spring-doc.cadn.net.cn

logging.logback.rollingpolicy.max-file-sizespring-doc.cadn.net.cn

LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZEspring-doc.cadn.net.cn

最大日志文件大小。spring-doc.cadn.net.cn

logging.logback.rollingpolicy.total-size-capspring-doc.cadn.net.cn

LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAPspring-doc.cadn.net.cn

要保留的日志备份的总大小。spring-doc.cadn.net.cn

logging.logback.rollingpolicy.max-historyspring-doc.cadn.net.cn

LOGBACK_ROLLINGPOLICY_MAX_HISTORYspring-doc.cadn.net.cn

要保留的最大存档日志文件数。spring-doc.cadn.net.cn

所有受支持的日志记录系统都可以在解析其配置文件时查阅系统属性。 请参阅中的默认配置spring-boot.jar例如:spring-doc.cadn.net.cn

如果要在日志记录属性中使用占位符,则应使用 Spring Boot 的语法,而不是底层框架的语法。 值得注意的是,如果您使用 Logback,您应该使用:作为属性名称与其默认值之间的分隔符,而不是使用:-.spring-doc.cadn.net.cn

您可以通过仅覆盖LOG_LEVEL_PATTERN(或logging.pattern.level与 Logback)。 例如,如果使用logging.pattern.level=user:%X{user} %5p,则缺省日志格式包含“user”的 MDC 条目(如果存在),如以下示例所示。spring-doc.cadn.net.cn

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

Logback 扩展

Spring Boot 包括许多 Logback 扩展,可以帮助进行高级配置。 您可以在logback-spring.xml配置文件。spring-doc.cadn.net.cn

因为标准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 参考指南了解更多详细信息。 以下列表显示了三个示例配置文件:spring-doc.cadn.net.cn

<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 中使用:spring-doc.cadn.net.cn

<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配置文件。spring-doc.cadn.net.cn

因为标准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 参考指南了解更多详细信息。 以下列表显示了三个示例配置文件:spring-doc.cadn.net.cn

<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文件。spring-doc.cadn.net.cn

以下示例演示如何设置名为applicationName上面写着spring.application.name从Spring开始Environment:spring-doc.cadn.net.cn

<Properties>
	<Property name="applicationName">${spring:spring.application.name}</Property>
</Properties>
查找键应在烤肉串大小写中指定(例如my.property-name).

Log4j2 系统属性

Log4j2 支持许多可用于配置各种项目的系统属性。 例如,log4j2.skipJansisystem 属性可用于配置ConsoleAppender将尝试在 Windows 上使用 Jansi 输出流。spring-doc.cadn.net.cn

Log4j2初始化后加载的所有系统属性都可以从SpringEnvironment. 例如,您可以添加log4j2.skipJansi=false给你的application.properties文件以拥有ConsoleAppender在 Windows 上使用 Jansi。spring-doc.cadn.net.cn

SpringEnvironment仅当系统属性和作系统环境变量不包含正在加载的值时才考虑。
在早期 Log4j2 初始化期间加载的系统属性不能引用 SpringEnvironment. 例如,在 Spring 环境可用之前,使用了 Log4j2 用于允许选择默认 Log4j2 实现的属性。