美文网首页
Slf4j日志添加用户id,reqId等信息

Slf4j日志添加用户id,reqId等信息

作者: 康英永 | 来源:发表于2020-12-31 18:00 被阅读0次

    通常,项目当中会添加各种各样的日志,为了方便用户请求流程的跟踪,需要每条日志上添加用户id,reqId等信息。但是通过函数参数的方式传递会比较繁琐,Slf4j为我们提供了一套简洁的处理方案。

    一、通过添加Filter实例,在http请求到来时解析用户id和reqId,并将信息保存到Slf4j的MDC中,MDC会将信息保存到当前线程的context map当中;

    //创建过滤器,从http头中获取用户id和reqId等信息

    @Order(Ordered.HIGHEST_PRECEDENCE)

    public class TraceFilter extends OncePerRequestFilter {

        @Override

        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,

                                        FilterChain filterChain)throws ServletException, IOException {

        try {

                String uid = request.getHeader("UID");

                String device = request.getHeader("DEVICE");

                String reqId = request.getHeader("REQUEST-ID");

                MDC.put("reqId", reqId);

                MDC.put("uid", uid);

                MDC.put("device", device);

                filterChain.doFilter(request, response);

            } finally {

                MDC.clear();

            }

        }

    }

    //将过滤器添加到servlet的过滤器链当中

    @Configuration

    public class WebFilterRegistration {

    @Bean

        public FilterRegistrationBeanregisterFilter() {

    FilterRegistrationBean filterRegistrationBean =new FilterRegistrationBean();

            filterRegistrationBean.setFilter(new TraceFilter());

            filterRegistrationBean.addUrlPatterns("/*");

            return filterRegistrationBean;

        }

    }

    二、设置log4j的日志格式,注意,日志格式里面的名称与放入MDC中的信息的名称保持一致

    <Console name="LogToConsole" target="SYSTEM_OUT">

                pattern="%d %p %c{1.} [%t] [traceId: %X{reqId} ] [userId: %X{uid} ] [device: %X{device} ] %m%n"/>

    </Console>

    三、在需要打印日志的类上添加@Slf4j注解,就可以使用log.info,error和warn打印带有用户id和reqId信息的日志了。

    @Slf4j

    public class LogTest {

    public static void main(String[] args) {

    MDC.put("uid", "1111");

            MDC.put("reqId", "xxxxx");

            MDC.put("device", "2222222");

            log.info("==========================");

            System.out.println("++++++++++++++++++");

        }

    }

    日志如下:

    2020-12-31 17:56:27,817 INFO c.m.s.LogTest [main] [traceId: xxxxx ] [userId: 1111 ] [device: 2222222 ] ==========================

    ++++++++++++++++++

    相关文章

      网友评论

          本文标题:Slf4j日志添加用户id,reqId等信息

          本文链接:https://www.haomeiwen.com/subject/okdroktx.html