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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Slf4j日志添加用户id,reqId等信息相关的知识,希望对你有一定的参考价值。

参考技术A 通常,项目当中会添加各种各样的日志,为了方便用户请求流程的跟踪,需要每条日志上添加用户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 %c1. [%t] [traceId: %XreqId ] [userId: %Xuid ] [device: %Xdevice ] %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等信息的主要内容,如果未能解决你的问题,请参考以下文章

Java 线上服务记录异常日志

使用mybatis开发Dao的原始方法,实现根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户信息等功能

Linux脚本练习之script022-使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的 id 号等信息。

关于slf4j log4j log4j2的jar包配合使用的那些事

用JAVA定义一个接口用于查询日志文件 日志文件有ID标识,用户名,日志内容等属性; 怎么去实现

添加filter过滤器,打印日志