Logging

Spring Boot 使用所有内部日志的 Commons Logging,但底层日志实现保持开放。默认配置支持 Java UtilgingLog4j2Logback。在每种情况下,日志管理器都预设使用控制台输出,并可选文件输出。spring-doc.cadn.net.cn

默认情况下,如果你使用起始程序,日志会使用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-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

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

Logback 没有致命水平。 它被映射为错误.
如果你有spring.application.name属性但不想被记录,你可以设置logging.include-application-namefalse.
如果你有spring.application.group属性但不想被记录,你可以设置logging.include-application-groupfalse.
有关相关ID的更多细节,请参见此文档

控制台输出

默认日志配置会在消息写入时向控制台回响。默认情况下,错误-水平警告-水平,且信息-级消息会被记录。你也可以通过启动应用程序来启用“调试”模式--调试旗。spring-doc.cadn.net.cn

$ java -jar myapp.jar --debug
你也可以具体说明debug=true在你的application.properties.

启用调试模式后,会配置部分核心日志器(嵌入式容器、休眠和 Spring Boot)以输出更多信息。 启用调试模式并不会配置你的应用程序记录所有消息调试水平。spring-doc.cadn.net.cn

或者,你可以通过启动应用程序时启用“追踪”模式--跟踪旗帜(或trace=真在你的application.properties). 这样做可以对部分核心日志(嵌入式容器、休眠模式生成以及整个 Spring 产品组合)进行跟踪日志。spring-doc.cadn.net.cn

如果你想禁用基于控制台的日志,可以设置logging.console.enabled属性到false.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

水平 颜色

致命spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

错误spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

警告spring-doc.cadn.net.cn

黄色spring-doc.cadn.net.cn

信息spring-doc.cadn.net.cn

绿spring-doc.cadn.net.cn

调试spring-doc.cadn.net.cn

绿spring-doc.cadn.net.cn

跟踪spring-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属性
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.log到指定的目录logging.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时会旋转,和控制台输出一样,错误-水平警告-水平,且信息-级消息默认会被记录。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-start(登录记录)开始spring-doc.cadn.net.cn

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

logging.logback.rollingpolicy.max文件大小spring-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历史spring-doc.cadn.net.cn

最多可保留的归档日志文件数量(默认为7个)。spring-doc.cadn.net.cn

日志等级

所有支持的日志系统都可以在 Spring 中设置日志器级别环境(例如,在application.properties)通过使用logging.level.<logger-name>=<level>哪里水平是追踪、调试、信息、警告、错误、致命或关闭。 这记录器可以通过以下方式配置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=调试将定型org.springframework.web调试.spring-doc.cadn.net.cn

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

对数群

能够将相关日志器分组以便同时配置,通常非常有用。 例如,你可能经常更改所有Tomcat相关日志设备的日志等级,但你很难记住顶级软件包。spring-doc.cadn.net.cn

为此,Spring Boot 允许你在 Spring 中定义日志组环境. 例如,这里可以介绍你如何通过将“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"

定义好后,你可以通过一行改变组内所有Logging机的水位: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

SQLspring-doc.cadn.net.cn

org.springframework.jdbc.core,org.hibernate.SQL,LoggerListener(记录器倾听器)spring-doc.cadn.net.cn

使用日志关闭钩子

为了在应用终止时释放日志资源,提供了一个关闭钩子,在 JVM 退出时触发日志系统清理。 除非你的应用部署为战争文件,否则该关闭钩子会自动注册。 如果你的应用有复杂的上下文层级结构,关闭钩子可能无法满足你的需求。 如果不行,关闭关闭钩子,并直接检查底层日志系统提供的选项。 例如,Logback 提供上下文选择器,允许每个日志生成器在其独立上下文中创建。 你可以使用logging.register-shutdown-hook属性以禁用关闭钩子。 设置为false将关闭注册。 你可以在你的中设置该财产application.propertiesapplication.yaml文件:spring-doc.cadn.net.cn

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

自定义日志配置

通过在类路径中加入相应的库,可以激活各种日志系统,并通过在类路径根或下一版 Spring 指定的位置提供合适的配置文件来进一步定制环境财产:logging.config.spring-doc.cadn.net.cn

你可以通过使用org.springframework.boot.logging.LoggingSystem系统属性。 值应为 的完全限定类名称LoggingSystem(记录系统)实现。 你也可以完全禁用 Spring Boot 的日志配置,方法是使用一个值没有.spring-doc.cadn.net.cn

由于日志初始化是在应用上下文创建时,无法控制日志记录@PropertySources春季@Configuration文件。 更改日志系统或完全禁用日志的唯一方法是通过系统属性。

根据你的日志系统,加载的有以下文件:spring-doc.cadn.net.cn

测井系统 定制

日志回溯spring-doc.cadn.net.cn

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

Log4j2spring-doc.cadn.net.cn

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

JDK(Java 工具日志)spring-doc.cadn.net.cn

logging.propertiesspring-doc.cadn.net.cn

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

为了方便自定义,一些其他属性是从春季转移过来的环境系统属性。 这使得这些属性可以被日志系统配置所消耗。例如,设置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

控制台上使用的日志模式(标准)。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

logging.structured.format.consolespring-doc.cadn.net.cn

CONSOLE_LOG_STRUCTURED_FORMATspring-doc.cadn.net.cn

用于控制台日志的结构化日志格式。spring-doc.cadn.net.cn

logging.structured.format.filespring-doc.cadn.net.cn

FILE_LOG_STRUCTURED_FORMATspring-doc.cadn.net.cn

用于文件日志的结构化日志格式。spring-doc.cadn.net.cn

PIDspring-doc.cadn.net.cn

PIDspring-doc.cadn.net.cn

当前进程ID(如果可能,发现且未定义为作系统环境变量时)。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-start(登录记录)开始spring-doc.cadn.net.cn

LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_STARTspring-doc.cadn.net.cn

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

logging.logback.rollingpolicy.max文件大小spring-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历史spring-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,那么默认日志格式中包含“用户”的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

结构化测井

结构化日志是一种将日志输出写成明确且通常机器可读格式的技术。 Spring Boot 支持结构化日志,并开箱即用支持以下 JSON 格式:spring-doc.cadn.net.cn

要启用结构化日志,请设置logging.structured.format.console(用于控制台输出)或logging.structured.format.file(用于文件输出)到你想使用的格式的ID。spring-doc.cadn.net.cn

如果你正在使用自定义日志配置,请更新你的配置以遵守CONSOLE_LOG_STRUCTURED_FORMATFILE_LOG_STRUCTURED_FORMAT系统属性。 拿CONSOLE_LOG_STRUCTURED_FORMAT例如:spring-doc.cadn.net.cn

<!-- 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 中包含的默认配置:spring-doc.cadn.net.cn

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

你也可以参考 Spring Boot 中包含的默认配置:spring-doc.cadn.net.cn

弹性通用模式

Elastic Common Schema 是一种基于 JSON 的日志格式。spring-doc.cadn.net.cn

要启用弹性通用模式日志格式,请设置相应的格式属性到ECS:spring-doc.cadn.net.cn

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

日志条如下:spring-doc.cadn.net.cn

{"@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 对象添加键值对。spring-doc.cadn.net.cn

服务值可以通过以下方式进行自定义logging.structured.ecs.service性能:spring-doc.cadn.net.cn

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 扩展日志格式是一种基于 JSON 的日志格式,适用于 Graylog 日志分析平台。spring-doc.cadn.net.cn

要启用Graylog扩展日志格式,请设置相应的格式属性到盖尔夫:spring-doc.cadn.net.cn

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

日志条如下:spring-doc.cadn.net.cn

{"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 对象添加键值对。spring-doc.cadn.net.cn

多个字段可以通过以下方式进行自定义logging.structured.gelf性能:spring-doc.cadn.net.cn

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 的日志格式。spring-doc.cadn.net.cn

要启用Logstash JSON日志格式,请设置相应的格式属性到Logstash:spring-doc.cadn.net.cn

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

日志条如下:spring-doc.cadn.net.cn

{"@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 对象添加键值对。spring-doc.cadn.net.cn

如果你添加标记,这些标记会显示在标签JSON中的字符串数组。spring-doc.cadn.net.cn

定制结构化日志 JSON

Spring Boot 尝试为结构化日志的 JSON 名称和输出选择合理的默认值。 不过,有时你可能需要根据自己的需求对 JSON 做一些小调整。 例如,你可能想更改一些名称,以符合日志摄取系统的期望。 你也可以过滤掉某些成员,因为你觉得他们没什么用。spring-doc.cadn.net.cn

以下属性允许您更改结构化日志 JSON 的编写方式:spring-doc.cadn.net.cn

属性 描述

logging.structured.json.包括 & logging.structured.json.排除spring-doc.cadn.net.cn

过滤 JSON 中的特定路径spring-doc.cadn.net.cn

logging.structured.json.重命名spring-doc.cadn.net.cn

在 JSON 中重命名特定成员spring-doc.cadn.net.cn

logging.structured.json.addspring-doc.cadn.net.cn

为 JSON 添加额外成员spring-doc.cadn.net.cn

例如,以下内容将排除log.level重命名process.id已生成并添加固定的公司名田:spring-doc.cadn.net.cn

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.定制器财产。 你也可以通过在META-INF/spring.factories文件。

定制结构化日志栈跟踪

每当日志有异常记录时,完整的栈跟踪都会包含在JSON输出中。 这些信息量可能对日志摄取系统处理成本较高,因此你可能需要调整栈痕迹的打印方式。spring-doc.cadn.net.cn

为此,您可以使用以下一项或多种属性:spring-doc.cadn.net.cn

属性 描述

logging.structured.json.stacktrace.rootspring-doc.cadn.net.cn

最后最后打印根项(与 Java 相同)或第一先打印根项目。spring-doc.cadn.net.cn

logging.structured.json.stacktrace.max长度spring-doc.cadn.net.cn

应打印的最大长度spring-doc.cadn.net.cn

logging.structured.json.stacktrace.max可投掷深度spring-doc.cadn.net.cn

每个栈线可打印的最大帧数(包括常见帧和抑制帧)spring-doc.cadn.net.cn

logging.structured.json.stacktrace.include-common-framesspring-doc.cadn.net.cn

是否应该包含或移除共同框架spring-doc.cadn.net.cn

logging.structured.json.stacktrace.include-hashesspring-doc.cadn.net.cn

如果需要包含栈跟踪的哈希值spring-doc.cadn.net.cn

例如,以下内容将使用根优先栈迹,限制其长度,并包含哈希值。spring-doc.cadn.net.cn

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致A的名字堆栈追踪打印机实现。 你也可以设置为测井系统强制使用常规日志系统栈跟踪输出。spring-doc.cadn.net.cn

堆栈追踪打印机实现还可以包含一个构造子参数,接受标准堆栈追踪打印机如果它希望对由属性创建的堆栈追踪打印机进行进一步定制。spring-doc.cadn.net.cn

支持其他结构化日志格式

Spring Boot 的结构化日志支持是可扩展的,允许你自定义格式。 为此,实现结构化日志材料接口。泛型论证必须是ILoggingEvent当使用 Logback 和LogEvent使用Log4j2时(这意味着你的实现绑定在特定的日志系统上)。 然后你的实现会被调用日志事件,并返回字符串要被记录,如本例所示:spring-doc.cadn.net.cn

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

要启用自定义格式,请设置属性logging.structured.format.consolelogging.structured.format.file对应你实现的完全限定类名称。spring-doc.cadn.net.cn

你的实现可以使用一些构造函数参数,这些参数会自动注入。 请参阅 JavaDoc结构化日志材料更多细节请阅读。spring-doc.cadn.net.cn

日志回溯扩展

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]]

配置文件专用配置

<春季简介>标签允许你根据活跃的 Spring 配置文件选择包含或排除配置部分。 配置文件部分支持在<配置>元素。 使用该名称属性 以指定接受该配置的配置文件。 这<春季简介>标签可以包含配置文件名称(例如)分期)或轮廓表达式。 例如,配置文件表达式允许表达更复杂的配置文件逻辑生产 &(欧盟中部 | 欧盟西部). 详情请查阅春季框架参考指南。 以下列表展示了三个示例配置文件: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中暴露属性环境用于Logback。 如果你想从你的application.properties归档到你的Logback配置中。 该标签的工作原理类似于Logback的标准<财产>标记。 然而,与其指定直接,你指定了该性产的(来自环境). 如果你需要把房产存放在其他地方,而不是在当地范围,你可以使用范围属性。 如果你需要一个备用值(如果属性没有在环境),你可以使用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>
必须用烤肉串情况指定(例如:my.property-name). 然而,可以将属性添加到环境通过使用宽松的规则。

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模块在你的构建中。

配置文件专用配置

<春季档案>标签允许你根据活跃的 Spring 配置文件选择包含或排除配置部分。 配置文件部分支持在<配置>元素。 使用该名称属性 以指定接受该配置的配置文件。 这<春季档案>标签可以包含配置文件名称(例如)分期)或轮廓表达式。 例如,配置文件表达式允许表达更复杂的配置文件逻辑生产 &(欧盟中部 | 欧盟西部). 详情请查阅春季框架参考指南。 以下列表展示了三个示例配置文件: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>

环境属性查询

如果你想参考你春季的房产环境在你的Log4j2配置中,你可以使用Spring:前缀查询。 如果你想从你的application.properties文件在你的Log4j2配置中。spring-doc.cadn.net.cn

以下示例展示了如何设置 Log4j2 属性为applicationName应用组那段内容如下spring.application.namespring.application.group来自Spring环境:spring-doc.cadn.net.cn

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

Log4j2 系统属性

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

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

Spring环境只有在系统属性和作系统环境变量不包含加载值时才考虑。
在早期Log4j2初始化期间加载的系统属性无法引用Spring环境. 例如,Log4j2 用来允许选择默认 Log4j2 实现的属性,在 Spring 环境可用之前就已使用。