0

我一直在尝试为我的spring-boot项目创建一个logback.xml日志记录模式,我可以在其中获得一些要求。

我想使用MDC以日志记录模式打印数据(例如process-idrequest-id、特定 API 请求的用户请求数据、相同的用户响应等),但我找不到任何关于如何MDC的解决方案通信并插入所需的值。logback.xml

我是spring-boot和 Java 开发的新手;请给我一些解决方案或想法。

4

2 回答 2

1

嗨,我有一个解决方案,Apache-Log4j 给定一个类是 ThreadContext。在此类的帮助下,我们可以在 MDC 上下文中添加/删除数据。

请按照以下步骤操作:

  • 创建一个 Servlet 过滤器或 Spring Given 过滤器。
  • 从“org.apache.logging.log4j”包中导入 ThreadContext 类。
  • 并在日志模式中添加 '[%X]'
  • 请按照下面的代码。

     import org.apache.logging.log4j.ThreadContext;
    
     @Component
     public class MyInterceptor extends HandlerInterceptorAdapter {
    
    
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse 
     response, Object handler) {
    
             RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
    
            long pid = Long.valueOf(bean.getName().split("@")[0]);
    
            ThreadContext.put("process-id", pid);
            ThreadContext.put("request-id", request.getParameter("requestid"));  //etc.. add Something..
    
    
    return true;
    }
    
      @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    
    ThreadContext.put("response", "add here");  //etc.. response.getSomething
    
    ThreadContext.clearMap(); //this remove all in the MDC 
    }
    
    }
    

    或者,
    您也可以使用 ServletFilter 来代替它。

于 2020-01-07T11:54:10.983 回答
0

您可以使用 put 在 MDC 中添加值

MDC.put("process-id", "1");

然后您定义一个日志模式,将这些值与 %X 一起使用

%X{process-id}

例如,您可以在 application.properties 中定义模式:

logging.pattern.console=%-4r [%thread] %-5level %X{process-id} - msg%n

或者在 logback.xml

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <layout>
      <Pattern>%-4r [%thread] %-5level %X{process-id} - msg%n</Pattern>
    </layout>       
</appender>
于 2020-01-07T11:03:59.267 回答