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

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>

http://www.lryc.cn/news/247645.html

相关文章:

  • 基于Spring原生框架构建原生Spring的第一个程序!
  • [个人笔记] Git的CLI笔录
  • 如何运行C/C++程序
  • HTML中input标签的23种type类型
  • 接口多态与方法多态
  • js小技巧|如何提取经过Function函数混淆了的代码
  • 【GitLab】流水线入门
  • es 中文前缀短语匹配(搜索智能补全)
  • 机器学习之决策树及随机森林
  • 用通俗的方式讲解Transformer:从Word2Vec、Seq2Seq逐步理解到GPT、BERT
  • 数据结构-01-数组
  • 甘草书店记: 2023年10月11日 星期三 晴 「做有光的人,照亮他人,也引人同行」
  • 让 OpenAI GPT4 出 10 道题测试其他开源大语言模型
  • 动态库与静态库
  • pdf文件编辑,[增删改查]
  • 如何与LEONI建立EDI连接?
  • 算法中的时间复杂度,空间复杂度
  • Python基础:推导式(Comprehensions)详解
  • 安防监控视频融合平台EasyCVR定制化页面开发
  • Roll-A-Ball 游戏
  • 医疗影像数据集—CT、X光、骨折、阿尔茨海默病MRI、肺部、肿瘤疾病等图像数据集
  • Linux僵死进程及文件操作
  • 用Python写一个浏览器集群框架
  • 【Github】git安装
  • sql语法大全
  • 小红书API接口测试 | 小红书笔记详情 API 接口测试指南
  • 实验六:Java流式编程与网络程序设计
  • 金字塔原理
  • VR全景技术助力政务服务大厅数字化,打造全新政务服务体验
  • 使用Python实现SVM来解决二分类问题