当前位置: 首页 > 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 

相关文章:

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

文章目录 1. 简介2. 实战案例2.1 环境依赖2.2 快速入门2.3 输出到文件2.4 添加附加字段2.5 自定义日志格式总结1. 简介 日志记录是应用故障排除中早已确立的部分,也是可观测性的三大支柱之一,另外两个是指标和追踪。在生产环境中,没有人喜欢盲目行事,而当故障发生时,开发…...

信号和槽思维脑图+相关练习

将登录框中的取消按钮使用信号和槽的机制&#xff0c;关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为"123456",如果账号密码匹配成功&#xff0c;当前界面关…...

Unity Feel插件快速入门

What is Feel? Feel是一个即用型解决方案&#xff0c;让你的Unity项目提高游戏体验&#xff0c;增强玩家获得的反馈感,例如相机震动,屏幕闪烁,淡入淡出,等等几十种效果。这是一个模块化、用户友好、易于扩展的系统。 本文旨在让你快速入门,从全局快速了解这个插件,以及基本用…...

数据链路层(四)---PPP协议的工作状态

1 PPP链路的初始化 通过前面几章的学习&#xff0c;我们学了了PPP协议帧的格式以及组成&#xff0c;那么对于使用PPP协议的链路是怎么初始化的呢&#xff1f; 当用户拨号上网接入到ISP后&#xff0c;就建立起了一条个人用户到ISP的物理链路。这时&#xff0c;用户向ISP发送一…...

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…...

UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets

插件名称&#xff1a;UPIrregularWidgets 插件包含以下功能 你可以点击任何图片&#xff0c;而不仅限于矩形图片。 UPButton、UPCheckbox 基于原始的 Button、Checkbox 扩展。 复选框增加了不规则图像识别功能&#xff0c;复选框增加了悬停事件。 欢迎来到我的博客 记录学习过…...

Elasticsearch Serverless 现已正式发布

作者&#xff1a;来自 Elastic Yaru Lin 基于全新无状态&#xff08;stateless&#xff09;架构的 Elasticsearch Serverless 现已正式发布。它采用完全托管方式&#xff0c;因此你可以快速启动项目而无需操作或升级&#xff0c;并且可以使用最新的向量搜索和生成式 AI 功能。 …...

如何使用apache部署若依前后端分离项目

本章教程介绍,如何在apache上部署若依前后端分离项目 一、教程说明 本章教程,不介绍如何启动后端以及安装数据库等步骤,着重介绍apache的反向代理如何配置。 参考此教程,默认你已经完成了若依后端服务的启动步骤。 前端打包命令使用以下命令进行打包之后会生成一个dist目录…...

openEuler安装UKUI桌面

# 升级更新 sudo yum -y update # 安装UKUI界面 dnf install ukui # 设置图形启动 systemctl set-default graphical.target # 重启 # 查看当前系统启动模式 systemctl get-default # 修改默认启动模式为 命令行界面模式 systemctl set-default multi-user.target 在UK…...

深入理解Oracle DB的锁和闩

1. 引言 本文深入介绍Oracle DB的锁和闩。 2. Oracle DB 锁的基本概念 2.1 定义与作用 锁是 Oracle 数据库用于控制并发访问的一种机制。它用于防止多个事务同时对同一数据进行不一致的操作&#xff0c;确保数据的完整性和一致性。例如&#xff0c;当一个事务正在更新一行数…...

jenkins+github+springboot自动部署

背景&#xff1a; 最近看流水线有点意思&#xff0c;就说自己也搞一套。 预期效果&#xff1a; idea提交代码后&#xff0c;GitHub接收&#xff0c;jenkins自动部署。【后续加个自动部署时的代码检查、单元测试、安全测试、sonarqube】 思路分析: idea上的spring代码push到gi…...

HTML5系列(10)-- 地理位置服务指南

前端技术探索系列&#xff1a;HTML5 地理位置服务指南 &#x1f30d; 致读者&#xff1a;探索位置服务的魅力 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 HTML5 的地理位置服务&#xff08;Geolocation API&#xff09;&#xff0c;这项强大的功能让我们能…...

【MySQL 进阶之路】SQL 优化

6.SQL 性能分析笔记 在现代数据库的高并发环境下&#xff0c;SQL 查询优化成为提升系统性能和响应速度的关键。本文将总结常见的 SQL 优化策略&#xff0c;包括插入优化、主键设计、排序优化、GROUP BY 优化等&#xff0c;帮助你在面对大规模数据时&#xff0c;做到高效查询和…...

Web3的技术栈详解:解读区块链、智能合约与分布式存储

随着数字时代的不断发展&#xff0c;Web3作为下一代互联网的核心理念逐渐走进了大众视野。它承载着去中心化、用户主权以及更高效、更安全的网络环境的期望。Web3不再是由少数中心化机构主导的网络&#xff0c;而是通过一系列核心技术的支撑&#xff0c;给每个用户赋予了更多的…...

[在线实验]-在docker中运行clickhouse

镜像下载 docker的clickhouse镜像资源-CSDN文库 加载镜像 首先&#xff0c;需要获取ClickHouse的Docker镜像。如果已经有镜像文件&#xff08;如clickhouse.tar&#xff09;&#xff0c;可以使用docker load命令来加载它&#xff1a; docker load --input clickhouse.tar …...

Rust常用命令总结

安装Rust 检查并更新Ubuntu的软件包 $ sudo apt update $ sudo apt upgrade安装相关依赖&#xff1a;安装GCC、G、MAKE、curl $ sudo apt install build-essential $ sudo apt install curl安装Rust $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh执行命令…...

Ant-Design X,AI组件库

前端的小伙伴们都知道有一个前端组件库超级火&#xff0c;可以说是 Top1 级别的&#xff0c;那就是 Ant-Design 而就在最近&#xff0c;他们又推出了一款新的组件库&#xff0c;Ant-Design X&#xff0c;这是专门用来做 AI 产品 的组件库&#xff0c;可能大家还很疑惑&#xf…...

Matplotlib 内置的170种颜色映射(colormap)

Matplotlib 提供了许多内置的颜色映射&#xff08;colormap&#xff09;选项&#xff0c;可以将数值数据映射到色彩范围——热力图、温度图、地图等可视化经常会用到。 # colormap 有两种引用形式plt.imshow(data, cmapBlues)plt.imshow(data, cmapcm.Blues) 颜色映射可以分为…...

在linux虚拟机安装VMware tools

安装UKUI桌面后&#xff0c;在火狐浏览器输入下载VMware tool地址&#xff1a; https://gitcode.com/open-source-toolkit/395d3/blob/5faa176939c7ac1f614a8b6f07f14cc31433ff95/VMwareTools-10.3.21-14772444.tar.gz 解压下载的软件包&#xff0c;进入目录&#xff1a;vmwa…...

初识EasyFramework

一、获取EF Git地址&#xff1a;https://github.com/HiWenHao/EFrameworkGitee地址&#xff1a;https://gitee.com/wang_xiaoheiiii/EFramework视频合集&#xff1a;EasyFramework介绍_哔哩哔哩_bilibiliQQ群: 711540505 二、 下载并初步了解 1. 下载完成后&#xff0c;可以看…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...