
本文介绍的 Spring Boot 3.4 最热门功能:结构化日志。
结构化日志使我们能够以清晰和机器可读的方式生成日志输出。
使用结构化日志,我们可有效地捕获和组织日志信息,使其更易于使用其他工具进行解析和分析。这种方法不仅能提高日志的可读性,还能简化日志数据的汇总和搜索过程,最终实现更高效的应用程序调试和监控。
Spring Boot 3.4 引入了对结构化日志的内置支持,开箱即支持以下 JSON 格式:
ecs) 弹性通用模式gelf) 灰度日志扩展日志格式logstash)根据您的需求(文件或控制台输出),可将这些属性设置为您希望使用的格式(ecs、gef 或 logstash)的 id,从而启用结构化日志:
logging.structured.format.console 用于控制台输出logging.structured.format.file 用于文件输出新的 Spring Boot 3.4 应用程序,默认日志格式类似:
Spring Boot 默认控制台日志格式:
为用 Elastic Common Schema 日志格式,将 logging.structured.format.console 置ecs:
日志格式将与以下基于 Elastic Common Schema 的格式类似,一种基于 JSON 的日志格式:
结构化日志,弹性通用模式 (ECS) 格式
与 Elastic Common Schema 类似,要使用 Graylog 扩展日志格式,我们将 logging.structured.format.console 属性设置为 gelf:
结构化日志、Graylog 扩展日志格式 (GELF)
Logstash JSON 格式是 Spring Boot 3.4 开箱即支持的最后一种基于 JSON 的结构化日志格式,通过将 logging.structured.format.console 属性设置为 logstash,可启用这种日志格式。
除了 Spring Boot 3.4 中开箱即支持的这 3 种 JSON 格式外,还可实现 StructuredLogFormatter 接口来实现自定义的结构化日志格式:
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";
 }
}logging.structured.{format_id}.service.name=MyService
logging.structured.{format_id}.service.version=1logging.structured.json.exclude=log.level
logging.structured.json.rename.process.id=procid
logging.structured.json.add.corpname=mycorpSpring Boot 3.4 支持结构化日志,以一致的机器可读格式提供日志,在简化与日志聚合工具的集成方面迈出了一大步,并允许在每个日志条目中嵌入丰富的上下文。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。