绵阳 网站建设百度官网网址

news/2025/10/7 20:12:35/文章来源:
绵阳 网站建设,百度官网网址,wordpress全景图片,雪军miui一键优化最近接触一个新的传统项目#xff0c;在联调过程中#xff0c;查看日志特别不方便#xff0c;既无trackId#xff0c;即无接口耗时#xff0c;所以写了该博客。话不多说#xff0c;直接上代码 1、实体类user package com.yk.domain;import lombok.Data;Data public cla…最近接触一个新的传统项目在联调过程中查看日志特别不方便既无trackId即无接口耗时所以写了该博客。话不多说直接上代码 1、实体类user package com.yk.domain;import lombok.Data;Data public class User {private Long id;private String username;private String sex;}2、接口统计返回实体封装类 /*** author : yk* date : 2024/03/11* description : 封装的基础 result*/ Data public class CommonResultT implements Serializable {private Integer code;private String message;private String traceId;private Long costTime;private T data;}2、controller层 Slf4j RestController RequestMapping(user) public class UserController {GetMapping(/query)public CommonResultUser query(RequestParam(name id, required false, defaultValue 1) Long id) {User user new User();user.setId(id);user.setUsername(yk);user.setSex(男);CommonResultUser apiResult new CommonResult();apiResult.setData(user);return apiResult;}PostMapping(/queryUser)public CommonResultUser queryAlert(RequestBody User user) {CommonResultUser apiResult new CommonResult();apiResult.setData(user);return apiResult;}} 3、aspect包 public class TraceIdUtil {public static final String REGEX -;public static final String TRACE_ID trace_id;/*** 从header和参数中获取traceId* 从网关传入数据** param request  HttpServletRequest* return traceId*/public static String getTraceIdByRequest(HttpServletRequest request) {String traceId request.getParameter(TRACE_ID);if (StringUtils.isBlank(traceId)) {traceId request.getHeader(TRACE_ID);}return traceId;}/*** 传递traceId至MDC** param traceId  链路id*/public static void setTraceId(String traceId) {if (StringUtils.isNotBlank(traceId)) {MDC.put(TRACE_ID, traceId);}}/*** 构建traceId** return*/public static String getTraceId() {if (StringUtils.isBlank(MDC.get(TRACE_ID))) {String traceId UUID.randomUUID().toString().replaceAll(REGEX, StringUtils.EMPTY);setTraceId(traceId);return traceId;}return MDC.get(TRACE_ID);}/*** 清理traceId*/public static void removeTraceId() {MDC.remove(TRACE_ID);} }package com.yk.aspect;import jakarta.servlet.ServletOutputStream; import jakarta.servlet.WriteListener; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponseWrapper;import java.io.ByteArrayOutputStream; import java.io.IOException;public class MyServletResponseWrapper extends HttpServletResponseWrapper {private final ByteArrayOutputStream buffer;private final ServletOutputStream out;public MyServletResponseWrapper(HttpServletResponse httpServletResponse) {super(httpServletResponse);buffer new ByteArrayOutputStream();out new WrapperOutputStream(buffer);}Overridepublic ServletOutputStream getOutputStream() {return out;}Overridepublic void flushBuffer()throws IOException {if (out ! null) {out.flush();}}public byte[] getContent() throws IOException {flushBuffer();return buffer.toByteArray();}static class WrapperOutputStream extends ServletOutputStream {private final ByteArrayOutputStream bos;public WrapperOutputStream(ByteArrayOutputStream bos) {this.bos bos;}Overridepublic void write(int b) {bos.write(b);}Overridepublic boolean isReady() {return false;}Overridepublic void setWriteListener(WriteListener writeListener) {}} }Getter public class MyServletRequestWrapper extends HttpServletRequestWrapper {private final String body;public MyServletRequestWrapper(HttpServletRequest request) {super(request);if (POST.equals(request.getMethod().toUpperCase(Locale.ROOT))) {StringBuilder stringBuilder new StringBuilder();BufferedReader bufferedReader null;InputStream inputStream null;try {inputStream request.getInputStream();if (inputStream ! null) {bufferedReader new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));char[] charBuffer new char[128];int bytesRead;while ((bytesRead bufferedReader.read(charBuffer)) 0) {stringBuilder.append(charBuffer, 0, bytesRead);}}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream ! null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (bufferedReader ! null) {try {bufferedReader.close();} catch (IOException e) {e.printStackTrace();}}}body stringBuilder.toString();} else {body request.getQueryString();}}Overridepublic ServletInputStream getInputStream() {final ByteArrayInputStream byteArrayInputStream new ByteArrayInputStream(body.getBytes());return new ServletInputStream() {Overridepublic boolean isFinished() {return false;}Overridepublic boolean isReady() {return false;}Overridepublic void setReadListener(ReadListener readListener) {}Overridepublic int read() {return byteArrayInputStream.read();}};}Overridepublic BufferedReader getReader() {return new BufferedReader(new InputStreamReader(this.getInputStream()));}} import com.alibaba.fastjson.JSONObject; import com.yk.domain.CommonResult; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component;import java.io.IOException; import java.nio.charset.StandardCharsets;Slf4j Component public class ContextFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) {log.info(ContextFilter init );}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {String traceId TraceIdUtil.getTraceId();//为了在post的时候能继续传递MyServletRequestWrapper request new MyServletRequestWrapper((HttpServletRequest) servletRequest);MyServletResponseWrapper response new MyServletResponseWrapper((HttpServletResponse) servletResponse);//消耗时间long start System.currentTimeMillis();log.info(请求入参{} , request.getBody());// 执行主体方法startchain.doFilter(request, response);// 执行主体方法 endlong end System.currentTimeMillis();byte[] content response.getContent();String resultParams ;if (content.length 0) {resultParams new String(content, StandardCharsets.UTF_8);}try {CommonResult? apiResult JSONObject.parseObject(resultParams, CommonResult.class);apiResult.setCostTime(end - start);apiResult.setTraceId(traceId);//返回消息 否则前台收不到消息log.info(返回值{}, JSONObject.toJSONString(apiResult));servletResponse.getOutputStream().write(JSONObject.toJSONString(apiResult).getBytes());} catch (Exception e) {log.info(ContextFilter error , e);servletResponse.getOutputStream().write(resultParams.getBytes());}}Overridepublic void destroy() {TraceIdUtil.removeTraceId();} }4、application.properties server.port8080#配置日志全链路跟踪 logId logging.pattern.console[%p]%d{yyyy-MM-dd HH:mm:ss.SSS}[%X{trace_id}][%X{extra_biz_info}] %m [%c#%M:%L]%n 5、pom配置 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.3/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.yk/groupIdartifactIdspringboot-hellword/artifactIdversion0.0.1-SNAPSHOT/versionnamespringboot-hellword/namedescriptionspringboot-hellword/descriptionpropertiesjava.version17/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.83/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.13.0/version/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UCB-CS70_离散数学_个人笔记:至少和至多 - Zeeh

有趣的命题 在note1中,提出了两个关于“至少”和“至多”的命题:There are at least three distinct integers x that satisfy P(x). 有 最多 三个不同的整数x这满足p(x)。对于这两个命题,可以分别用下面两个式子…

太原网站制作开发域名怎么实名认证

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 找镜像: docker search nexus2. 拉取镜像:(我已经拉取过,不选择版本时,默认…

模板做的网站 怎么提升排名商标设计公司推荐

冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越…

10.7 NOIP 模拟赛 T2. 中心极限定理

思路 发现吃马不好维护, 考虑直接状态压缩马的存活情况, 可以做到 \(\mathcal{O} (n^2 2^m)\) 考虑进一步处理, 发现由于你的棋子不能回头, 吃掉一个马后, 最多走三步就跳出了马的范围, 所以我们可以直接把前两步的路线…

【题解】10.6 国庆中秋 提高组 热身赛

1.栅栏密码 题目传送门题目大意: 给定高度 h 和一行使用栅栏密码加密的密文字符串 s,请你输出一行明文字符串 plain。 即把明文排列成若干个 \/\/\/ 的形状,然后再逐行按从左到右的顺序取出字符,形成密文。STEP 1.…

深圳手机网站建设牛商网购物网站的排版

简介: 先说下什么是人脸识别系统:举个例子,公司门口有个人脸识别系统,员工站到门口,看着摄像头,大屏幕上会抓拍到你的人脸,然后和公司的员工照片库里的照片比对,比对成功就提示&…

深入解析:pikachu通关教程-File Inclusion

深入解析:pikachu通关教程-File Inclusion2025-10-07 20:03 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: blo…

UCB-CS70个人笔记:至少和至多 - Zeeh

有趣的命题 在note1中,提出了两个关于“至少”和“至多”的命题:There are at least three distinct integers x that satisfy P(x). 有 最多 三个不同的整数x这满足p(x)。对于这两个命题,可以分别用下面两个式子…

几个重要的偏微分方程

几个重要的偏微分方程1. 弦振动方程

虚拟机器人学习自然语言指令技术解析

介绍两项创新性研究,通过视觉与语言理解技术提升虚拟环境中机器人任务完成能力。包含DialFRED对话增强框架和感知可用性神经SLAM模型,在模拟环境中实现超过20%的性能提升。虚拟机器人学习自然语言指令技术解析 研究背…

vr技术在网站建设的应用南京浦口网站建设

🤖 与ChatGPT亲密接触 🤖 ChatGPT!它就是一款强大的聊天型人工智能模型,可以与你进行各种有趣的对话,就像我们在这里一样。不论你想聊天、提问、寻求建议,还是只是想找个伙伴一起闲聊,ChatGPT都…

题解:换乘旅行

换乘旅行 题目描述 小明来到了一座著名的旅游城市,这座城市有一个包含\(n\)个站点的公共交通网络。该网络的运行方式非常独特。每个站点\(i\)都有一个按顺序排列的摆渡车出发队列。每辆摆渡车都有一个固定的、预先设定…

2025企业级AI数据防泄漏指南:精准选型与核心指标全景透视

2025企业级AI数据防泄漏指南:精准选型与核心指标全景透视为应对AI应用敏感数据泄露的严峻挑战,2025年市场主流方案已形成流式网关技术路线共识。本文基于AI-FOCUS团队的AI FENCE测试数据与合规要求,深度解析拦截召回…

网站排名优化有哪些牛霸天的软件1莆田百度seo公司

使用python时,我们会发现经常需要import一些模块。模块其实就是一个python文件,导入模块的实质是把模块中的内容执行一次。例如,有个模块叫mokuai,我们可以这样导入from mokuai import * # 导入所有的内容from mokuai import a #从import中导…

完整教程:结构型设计模式之Proxy(代理)

完整教程:结构型设计模式之Proxy(代理)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

感觉你是那种

感觉你是那种写完T1被卡常问候出题人后发现没删fsanitize的人。 感觉你是那种计数题都不愿意在纸上写式子的人。 感觉你是那种看完计数题题解后都不知道结论是怎么观察到只能喷题目的人。 感觉你是那种打完CF最后总是会…

完整教程:三层架构 vs SOA vs 微服务:该选谁?

完整教程:三层架构 vs SOA vs 微服务:该选谁?2025-10-07 19:49 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

学做网站论坛vip共享网站设计的基本过程

人工湿地计算书1、尾水提升泵房集水池基本参数集水池设计规模为30000m3/d,约折合1250m3/h,按水力停留时间HRT为0.25 h计,集水井有效容积应为312.5 m3,考虑到与污水厂原有排污管道相契合,集水设计尺寸为:LBH…

汽车网站开发背景代理小程序加盟

一个文件夹下面有好多图片格式是jpg大小是1920*1080,把它们处理成1280*720并按原先图片的名保存在另一路径下 这里首先要找到给定路径下所有的图片文件,然后在修改图片文件的大小,这里用到PIL和glob两个库: # -*- coding: utf-8 -…

简述电子商务网站的建设步骤制作美食

当今时代,数据已经成为我们生活的重要组成部分,而硬盘又是存储数据的主要设备之一。然而,由于各种原因,我们的数据很容易丢失。是的,我们可以通过数据恢复软件来找回丢失的数据,但是这个过程是否会对硬盘造…