当前位置: 首页 > news >正文

SpringBoot开发——Spring Boot3.4 强大的结构化日志记录

文章目录

  • 1. 简介
  • 2. 实战案例
    • 2.1 环境依赖
    • 2.2 快速入门
    • 2.3 输出到文件
    • 2.4 添加附加字段
    • 2.5 自定义日志格式
  • 总结

1. 简介

日志记录是应用故障排除中早已确立的部分,也是可观测性的三大支柱之一,另外两个是指标和追踪。在生产环境中,没有人喜欢盲目行事,而当故障发生时,开发人员会很高兴有日志文件可供参考。日志通常以人类可读的格式输出。

结构化日志记录是一种技术,其中日志输出以定义明确、通常机器可读的格式编写。这种格式可以输入到日志管理系统中,并启用强大的搜索和分析功能。结构化日志记录最常用的格式之一是JSON

随着Spring Boot 3.4的发布,结构化日志记录得到了开箱即用的支持。它支持Elastic Common Schema (ECS)Logstash格式,但也可以扩展以支持自定义的格式。

2. 实战案例

由于Spring Boot3.4的正式发布将在2024/11/21,所以我们目前只能使用对应的里程碑版本(我使用的M3)。

2.1 环境依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.0-M3</version><relativePath/>
</parent>

注意:你需要配置专用的仓库地址才可下载非正式版本。

2.2 快速入门

该版本默认还是常规机器可读的格式输出日志,所以我们需要做如下配置

logging:structured:format:console: ecs

使用ecs格式输出到控制台
在这里插入图片描述
控制台将以JSON格式输出日志。

2.3 输出到文件

你还可以将结构化日志写入文件。例如,这可用于在控制台上打印人类可读日志,并将结构化日志写入文件供机器提取。

要启用此功能,请将如下配置添加到配置文件当中,并确保删除 logging.structured.format.console=ecs 设置:

logging:file:name: json.logstructured:format:file: ecs

如上配置后,将在项目的根目录下生成json.log日志文件,文件内容将于上面控制台的日志一样。

2.4 添加附加字段

结构化日志记录的一个强大功能是,开发人员可以以结构化的方式向日志事件中添加信息。例如,可以向每个日志事件中添加用户ID,最后根据该ID进行过滤,以查看该特定用户执行了哪些操作。

Elastic Common SchemaLogstash都会在JSON中包含Mapped Diagnostic Context(映射诊断上下文)的内容。为了看到这一点是如何工作的,让我们创建自己的日志消息:

@Component
public class PackCustomLogger implements CommandLineRunner 
http://www.lryc.cn/news/497728.html

相关文章:

  • 信号和槽思维脑图+相关练习
  • Unity Feel插件快速入门
  • 数据链路层(四)---PPP协议的工作状态
  • 【C++】入门【六】
  • UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets
  • Elasticsearch Serverless 现已正式发布
  • 如何使用apache部署若依前后端分离项目
  • openEuler安装UKUI桌面
  • 深入理解Oracle DB的锁和闩
  • jenkins+github+springboot自动部署
  • HTML5系列(10)-- 地理位置服务指南
  • 【MySQL 进阶之路】SQL 优化
  • Web3的技术栈详解:解读区块链、智能合约与分布式存储
  • [在线实验]-在docker中运行clickhouse
  • Rust常用命令总结
  • Ant-Design X,AI组件库
  • Matplotlib 内置的170种颜色映射(colormap)
  • 在linux虚拟机安装VMware tools
  • 初识EasyFramework
  • OpenStack-Glance组件
  • SPC三种判定准则的算法
  • 20241129解决在Ubuntu20.04下编译中科创达的CM6125的Android10出现找不到库文件libncurses.so.5的问题
  • Mybatis @MapKey注解实现List转Map
  • vue中使用socket.io统计在线用户
  • zotero中pdf-translate插件和其他插件的安装
  • 【Linux操作系统】多线程控制(创建,等待,终止、分离)
  • 二百七十八、ClickHouse——将本月第一天所在的那一周视为第一周,无论它是从周几开始的,查询某个日期是本月第几周
  • JVM八股文精简
  • 深入解析CMake中的find_package()命令:工作原理及实际应用示例
  • 使用数据层进行数据生命周期管理