zoukankan      html  css  js  c++  java
  • 请求日志添加request-id

    package com.xf.config;
    
    import java.util.Date;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.slf4j.MDC;
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import cn.hutool.core.date.DateUtil;
    import cn.hutool.core.util.IdUtil;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class RequestInterceptor implements HandlerInterceptor {
        public static final String REQUEST_ID_KEY = "request-id";
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            MDC.put(REQUEST_ID_KEY, getRequestId(request));
            log.info("拦截一下哦");
            return HandlerInterceptor.super.preHandle(request, response, handler);
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
            // 把requestId添加到响应头,以便其它应用使用
            response.addHeader(REQUEST_ID_KEY, MDC.get(REQUEST_ID_KEY));
            // 请求完成,从MDC中移除requestId
            MDC.remove(REQUEST_ID_KEY);
        }
    
        public static String getRequestId(HttpServletRequest request) {
            String requestId;
            String parameterRequestId = request.getParameter(REQUEST_ID_KEY);
            String headerRequestId = request.getHeader(REQUEST_ID_KEY);
            // 根据请求参数或请求头判断是否有“request-id”,有则使用,无则创建
            if (parameterRequestId == null && headerRequestId == null) {
                requestId = DateUtil.format(new Date(), "yyyyMMddHHmmssSSS") + IdUtil.simpleUUID().substring(0, 5);
            } else {
                requestId = parameterRequestId != null ? parameterRequestId : headerRequestId;
            }
            return requestId;
        }
    }
    <property name="log.pattern"
            value="%X{request-id} %-5level %logger{200} - [%method,%line] - %msg%n" />
  • 相关阅读:
    ONNX 开始
    Linux 性能相关工具
    Prometheus + Grafana 快速上手
    RTSP 流相关工具介绍
    TensorFlow Serving
    TensorFlow 的 JupyterLab 环境
    【排序算法动画解】排序介绍及冒泡排序
    上课老师提问我什么是二叉查找树,我把这些动图拿了出来,动图图解及代码实现。
    如何找东西?查找算法之顺序查找和二分查找详解
    【数据结构和算法:简单方法】谈一谈优先队列的实现
  • 原文地址:https://www.cnblogs.com/wanjun-top/p/13566821.html
Copyright © 2011-2022 走看看