首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >揭秘 Spring Boot 3.4 的日志记录新玩法

揭秘 Spring Boot 3.4 的日志记录新玩法

原创
作者头像
JavaEdge
发布2024-12-28 20:50:15
发布2024-12-28 20:50:15
5990
举报

0 前言

本文介绍的 Spring Boot 3.4 最热门功能:结构化日志。

1 为什么结构化日志很重要?

结构化日志使我们能够以清晰和机器可读的方式生成日志输出。

使用结构化日志,我们可有效地捕获和组织日志信息,使其更易于使用其他工具进行解析和分析。这种方法不仅能提高日志的可读性,还能简化日志数据的汇总和搜索过程,最终实现更高效的应用程序调试和监控。

Spring Boot 3.4 引入了对结构化日志的内置支持,开箱即支持以下 JSON 格式:

  • Elastic Common Schema (ecs) 弹性通用模式
  • Graylog Extended Log Format (gelf) 灰度日志扩展日志格式
  • Logstash (logstash)

2 咋启用结构化日志?

根据您的需求(文件或控制台输出),可将这些属性设置为您希望使用的格式(ecs、gef 或 logstash)的 id,从而启用结构化日志:

  • logging.structured.format.console 用于控制台输出
  • logging.structured.format.file 用于文件输出

3 实践中会发生什么

新的 Spring Boot 3.4 应用程序,默认日志格式类似:

Spring Boot 默认控制台日志格式:

3.1 Elastic(弹性) Common Schema (ECS) format 通用模式格式

为用 Elastic Common Schema 日志格式,将 logging.structured.format.console 置ecs:

日志格式将与以下基于 Elastic Common Schema 的格式类似,一种基于 JSON 的日志格式:

结构化日志,弹性通用模式 (ECS) 格式

3.2 Graylog Extended Log Format(GELF)

与 Elastic Common Schema 类似,要使用 Graylog 扩展日志格式,我们将 logging.structured.format.console 属性设置为 gelf:

结构化日志、Graylog 扩展日志格式 (GELF)

3.3 使用Logstash JSON format

Logstash JSON 格式是 Spring Boot 3.4 开箱即支持的最后一种基于 JSON 的结构化日志格式,通过将 logging.structured.format.console 属性设置为 logstash,可启用这种日志格式。

4 自定义格式

除了 Spring Boot 3.4 中开箱即支持的这 3 种 JSON 格式外,还可实现 StructuredLogFormatter 接口来实现自定义的结构化日志格式:

代码语言:java
复制
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";
 }

}

5 提示

  • 对于文件输出,应用 logging.structured.format.file 属性
  • 对于这 3 种格式中的每一种,我们都可以使用相关属性自定义 service.name 和版本。Elastic Common Schema 还提供了两个用于自定义的属性(environment 和 node-name)
代码语言:properties
复制
logging.structured.{format_id}.service.name=MyService
logging.structured.{format_id}.service.version=1
  • All 3 formats add every key-value pair contained in the MDC to the JSON object. 这三种格式都会将 MDC 中包含的每个键值对添加到 JSON 对象中。
  • Spring Boot 提供了一些用于自定义和说明 JSON 结果的属性,例如更改某些名称或过滤掉 JSON 输出中的某些成员(请查看官方文档)
代码语言:properties
复制
logging.structured.json.exclude=log.level
logging.structured.json.rename.process.id=procid
logging.structured.json.add.corpname=mycorp

6 总结

Spring Boot 3.4 支持结构化日志,以一致的机器可读格式提供日志,在简化与日志聚合工具的集成方面迈出了一大步,并允许在每个日志条目中嵌入丰富的上下文。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0 前言
  • 1 为什么结构化日志很重要?
  • 2 咋启用结构化日志?
  • 3 实践中会发生什么
    • 3.1 Elastic(弹性) Common Schema (ECS) format 通用模式格式
    • 3.2 Graylog Extended Log Format(GELF)
    • 3.3 使用Logstash JSON format
  • 4 自定义格式
  • 5 提示
  • 6 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档