Tlog SpringBoot3.x版本无法正常打印TraceId等数据
问题:Springboot3.0版本使用Tlog(1.5.1版本)开源框架时无法打印指定参数
原因:在Java EE 8及更高版本中,javax.servlet.*包已经替换成了jakarta.servlet.*,但是tlog官方只更新到了1.5.1版本所以还没支持到
解决方法:重写tlog中TLogServletFilter,TLogWebCommon两个关键类将javax.servlet包的东西替换成jakarta.servlet包的就可以了
话不多说,直接上代码
TLogServletFilter重写
import com.my.TLogWebCommon;
import com.yomahub.tlog.constant.TLogConstants;
import com.yomahub.tlog.context.TLogContext;import java.io.IOException;import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;/*** 支持servlet* @author Bryan.Zhang* @since 1.3.5*/
public class TLogFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}//里面可以加入自定义的一些参数@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {if (request instanceof HttpServletRequest && response instanceof HttpServletResponse){try{TLogWebCommon.loadInstance().preHandle((HttpServletRequest)request);//把traceId放入response的header,为了方便有些人有这样的需求,从前端拿整条链路的traceId((HttpServletResponse)response).addHeader(TLogConstants.TLOG_TRACE_KEY, TLogContext.getTraceId());chain.doFilter(request, response);return;}finally {TLogWebCommon.loadInstance().afterCompletion();}}chain.doFilter(request, response);}@Overridepublic void destroy() {}
}
TLogWebCommon类重写
import com.yomahub.tlog.constant.TLogConstants;
import com.yomahub.tlog.core.rpc.TLogLabelBean;
import com.yomahub.tlog.core.rpc.TLogRPCHandler;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** TLog web这块的逻辑封装类*/
public class TLogWebCommon extends TLogRPCHandler {private final static Logger log = LoggerFactory.getLogger(TLogWebCommon.class);private static volatile TLogWebCommon tLogWebCommon;public static TLogWebCommon loadInstance() {if (tLogWebCommon == null) {synchronized (TLogWebCommon.class) {if (tLogWebCommon == null) {tLogWebCommon = new TLogWebCommon();}}}return tLogWebCommon;}public void preHandle(HttpServletRequest request) {String traceId = request.getHeader(TLogConstants.TLOG_TRACE_KEY);String spanId = request.getHeader(TLogConstants.TLOG_SPANID_KEY);String preIvkApp = request.getHeader(TLogConstants.PRE_IVK_APP_KEY);String preIvkHost = request.getHeader(TLogConstants.PRE_IVK_APP_HOST);String preIp = request.getHeader(TLogConstants.PRE_IP_KEY);TLogLabelBean labelBean = new TLogLabelBean(preIvkApp, preIvkHost, preIp, traceId, spanId);processProviderSide(labelBean);}public void afterCompletion() {cleanThreadLocal();}
}
注册自己写的过滤器
@Configuration
@ComponentScan(value = "com.yomahub.tlog")
public class LogConfig {@Beanpublic FilterRegistrationBean<TLogFilter> loggingFilter() {FilterRegistrationBean<TLogFilter> registrationBean = new FilterRegistrationBean<>();registrationBean.setFilter(new TLogFilter());registrationBean.addUrlPatterns("/*"); // 拦截所有请求路径return registrationBean;}
}
涉及到的依赖包
<!-- 默认有无需引入,本文因为将代码抽取到了公共模块所以引入了该包 --><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId></dependency><dependency><groupId>com.yomahub</groupId><artifactId>tlog-all-spring-boot-starter</artifactId><version>1.5.1</version></dependency>
相关文章:
Tlog SpringBoot3.x版本无法正常打印TraceId等数据
问题:Springboot3.0版本使用Tlog(1.5.1版本)开源框架时无法打印指定参数 原因:在Java EE 8及更高版本中,javax.servlet.*包已经替换成了jakarta.servlet.*,但是tlog官方只更新到了1.5.1版本所以还没支持到…...

基于Spring原生框架构建原生Spring的第一个程序!
😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…...
[个人笔记] Git的CLI笔录
Git - CLI笔录 Git的CLI笔录 Git - CLI笔录Git的CLI笔录 Git的CLI笔录 origin: 表示远程仓库节点名称。 当有多个远程仓库时 可新增远程仓库节点名称如 new_origin | new_remote origin/HEAD: 表示当前Git仓库默认分支的引用,通常指向origin/master或origin/main g…...

如何运行C/C++程序
一、在线运行C/C 码曰 - 让代码在云端多飞一会:这是一个支持C/C,Java,Python等多种语言的在线编程,编译运行,粘贴分享的平台。你可以在这里输入你的代码,点击运行按钮,就可以看到输出结果。你也…...
HTML中input标签的23种type类型
一、概述 随着html5的出现,input标签新增了多种类型,用以接收各种类型的用户输入。其中传统输入控件有10种,新增输入控件有13种。 二、传统类型 传统输入控件有10种,如下所示 text 定义单行文本输入框 password 定义…...

接口多态与方法多态
作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 在上一篇设计山寨版Str…...

js小技巧|如何提取经过Function函数混淆了的代码
关注它,不迷路。 本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除! 1.需求 星友发过来一个混淆代码,打开一看,长这…...
【GitLab】流水线入门
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮࿰…...
es 中文前缀短语匹配(搜索智能补全)
需求:es进行前缀匹配,用来进行智能补全 过程:es正常的prefix只能进行词语匹配,而中文的分词大部分按字分词,不按语义分词,所以无法搜索出正确的前缀匹配,而能进行短语匹配的match_phrase_prefix…...
机器学习之决策树及随机森林
决策树 概念 决策树(Decision Tree)是一种常见的机器学习算法,用于分类和回归任务。它是一种树状结构,其中每个内部节点表示一个特征或属性,每个分支代表一个决策规则,而每个叶节点表示一个输出标签或值。 构建决策树过程 构建决策树的过程通常涉及以下步骤: 数据准…...

用通俗的方式讲解Transformer:从Word2Vec、Seq2Seq逐步理解到GPT、BERT
直到今天早上,刷到CSDN一篇讲BERT的文章,号称一文读懂,我读下来之后,假定我是初学者,读不懂。 关于BERT的笔记,其实一两年前就想写了,迟迟没动笔的原因是国内外已经有很多不错的资料࿰…...
数据结构-01-数组
每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构。 1-数组的概念和特性 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来…...

甘草书店记: 2023年10月11日 星期三 晴 「做有光的人,照亮他人,也引人同行」
发了两篇《甘草书店记》,书店计划公之于众,收获了不少人的赞扬和鼓励,来自生活中的友人,来自麦田的客户和朋友,来自图书界的同行前辈,也来自商界的同仁。其中,最特别留言来自甘草书店投资方的张…...
让 OpenAI GPT4 出 10 道题测试其他开源大语言模型
让 OpenAI GPT4 出 10 道题测试其他开源大语言模型 1. 中文题目及答案2. 日文题目及答案3. 英文题目及答案 1. 中文题目及答案 数学题:一个矩形的长是10厘米,宽是5厘米,求它的面积。 答案:面积 长 x 宽 10厘米 x 5厘米 50平方厘…...
动态库与静态库
1. 库 是代码的二进制的封装形式 在其他的源代码或库中,可以直接调用库的,但是又看不到它 没有公开源代码 库的这种实现方法有利于模块化 而且只要接口合理 不影响库的使用的 sum.c sum.h int sum(int a,int b) { return ab; } xxx.c 需要使用…...

pdf文件编辑,[增删改查]
pdf文件是投标文件中必不可少的格式,传统的方式先编辑word格式,最后生成pdf,但是有时候需要直接编辑pdf文件,编辑pdf的工具无疑 “adobe acrobat dc”是最好用的之一了 1.把图片文件添加到pdf指定位置,例如把一张图片添…...

如何与LEONI建立EDI连接?
莱尼LEONI是一家为汽车及其他行业提供能源数据管理产品、解决方案及服务的全球供应商。供应链范围从研发生产标准化电缆、特种电缆和数据电缆到高度复杂的布线系统和相关组件。本文将介绍如何与莱尼LEONI建立EDI连接。 什么是EDI? EDI全称Electronic Data Interch…...

算法中的时间复杂度,空间复杂度
一、前言 算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别 衡量不同算法之间的优劣主要是通过时…...

Python基础:推导式(Comprehensions)详解
1. 推导式概念 Python推导式(comprehensions)是一种简洁而强大的语法,用于从已存在的数据(列表、元组、集合、字典等)中创建新的数据结构。推导式包括: 列表推导式元组推导式字典推导式集合推导式 2. 列表…...

安防监控视频融合平台EasyCVR定制化页面开发
安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...