springboot单体项目链路日志跟踪及接口耗时

最近接触一个新的传统项目,在联调过程中,查看日志特别不方便,既无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 CommonResult<T> 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 CommonResult<User> query(@RequestParam(name = "id", required = false, defaultValue = "1") Long id) {
        User user = new User();
        user.setId(id);
        user.setUsername("yk");
        user.setSex("男");
        CommonResult<User> apiResult = new CommonResult<>();
        apiResult.setData(user);
        return apiResult;
    }


    @PostMapping("/queryUser")
    public CommonResult<User> queryAlert(@RequestBody User user) {
        CommonResult<User> 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

相关推荐

  1. springboot单体项目日志跟踪接口耗时

    2024-03-14 21:14:01       39 阅读
  2. 分布式微服务架构日志调用跟踪-traceId

    2024-03-14 21:14:01       64 阅读
  3. Spring Cloud项目中实现分布式日志追踪

    2024-03-14 21:14:01       52 阅读
  4. Spring Cloud Sleuth:分布式跟踪

    2024-03-14 21:14:01       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 21:14:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 21:14:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 21:14:01       82 阅读
  4. Python语言-面向对象

    2024-03-14 21:14:01       91 阅读

热门阅读

  1. express-generator生成nodejs服务基本骨架

    2024-03-14 21:14:01       40 阅读
  2. Python 学习——Python requests 库文档

    2024-03-14 21:14:01       37 阅读
  3. Element ui上传excel到并修改字段名

    2024-03-14 21:14:01       39 阅读
  4. Python中的函数定义与使用

    2024-03-14 21:14:01       40 阅读
  5. 海豚调度系列之:集群部署(Cluster)

    2024-03-14 21:14:01       38 阅读
  6. L1-039 古风排版(C++)

    2024-03-14 21:14:01       39 阅读
  7. C#在字段中存储数据

    2024-03-14 21:14:01       43 阅读
  8. 如何使用vue定义组件之——全局or局部

    2024-03-14 21:14:01       41 阅读
  9. Spring核心接口:ObjectProvider接口

    2024-03-14 21:14:01       45 阅读
  10. MyBatis-Plus知识点(一)

    2024-03-14 21:14:01       37 阅读