内容提要
Spring Boot 3.4现在支持结构化日志记录,可以将日志输出以JSON等机器可读的格式写入,从而实现强大的搜索和分析能力。开发人员可以在控制台和文件中启用结构化日志记录,并添加额外的字段来记录事件。Spring Boot还支持自定义日志格式,支持Elastic Common Schema(ECS)和Logstash格式,但开发人员也可以创建自己的格式。结构化日志记录的文档已经更新。
延伸解读
结构化日志的配置与输出分离
Spring Boot 3.4 允许控制台和文件分别配置结构化日志格式。例如,可以保持控制台输出人类可读的日志,同时将 JSON 格式写入文件供机器采集。通过 logging.structured.format.console 和 logging.structured.format.file 属性即可实现,这为开发调试与生产分析提供了灵活性。
利用 MDC 或流式 API 添加上下文字段
结构化日志支持在日志事件中附加额外信息,如用户 ID。可以通过 Mapped Diagnostic Context (MDC) 设置键值对,Spring Boot 会自动将其包含在 JSON 输出中;也可以使用流式日志 API 的 addKeyValue 方法直接添加字段,无需依赖 MDC。这些字段便于后续过滤和分析特定用户的行为。
内置 ECS 字段与自定义格式扩展
Spring Boot 对 Elastic Common Schema 提供了内置支持,可自动包含服务名称、版本、环境和节点名称等字段,通过 application.properties 即可配置。如果内置格式不满足需求,开发者可以实现 StructuredLogFormatter 接口创建自定义格式,输出任意字符串,甚至使用 Spring Boot 3.4 新增的 JsonWriter 方便地生成 JSON。
Q&A
Spring Boot 3.4 的结构化日志记录有什么新特性?
Spring Boot 3.4 支持以 JSON 等机器可读格式输出日志,增强了日志的搜索和分析能力。
如何在 Spring Boot 3.4 中启用结构化日志记录?
在 application.properties 中添加 logging.structured.format.console=ecs 或 logging.structured.format.file=ecs 来启用控制台或文件的结构化日志记录。
开发人员如何添加自定义字段到结构化日志中?
开发人员可以使用 MDC 添加用户 ID 等信息,或使用流式日志 API 直接在日志事件中添加额外字段。
Spring Boot 3.4 支持哪些日志格式?
Spring Boot 3.4 支持 Elastic Common Schema(ECS)和 Logstash 格式,也允许开发人员创建自定义格式。
如何创建自定义的结构化日志格式化程序?
需要实现 StructuredLogFormatter 接口,并在 application.properties 中引用自定义实现。
Spring Boot 3.4 中的 JsonWriter 有什么用?
JsonWriter 用于方便生成 JSON 格式的日志,支持自定义 JSON 输出结构。