Как получить пользовательский запрос, ответ и идентификатор запроса вместе с идентификатором процесса в журнале весенней загрузки с использованием logback. xml и MD C? - PullRequest
0 голосов
/ 07 января 2020

Я пытался создать logback. xml шаблон ведения журнала для моего проекта spring-boot , в котором я могу получить некоторые требования.

Я хочу напечатать данные в шаблоне регистрации (например, идентификатор процесса , идентификатор-запроса , данные запроса пользователя для конкретного запроса API, ответ пользователя для то же самое, et c.), используя MD C, но я не смог найти никакого решения о том, как MD C связывается с logback.xml и вставляет требуемое значение.

Я новичок в разработке spring-boot и Java; пожалуйста, предложите мне какое-нибудь решение или идеи.

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Привет, у меня есть одно решение, Apache -Log4j, учитывая, что один класс - ThreadContext. С помощью этого класса мы можем добавлять / удалять данные в контексте MD C.

, пожалуйста, выполните следующие шаги:

  • Создайте один фильтр сервлетов или фильтр с учетом пружин.
  • импортировать потоки ThreadContext из пакета 'org. apache .logging.log4j'.
  • И добавить '[% 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.

0 голосов
/ 07 января 2020

Вы можете добавить значения в MD C, используя put

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

И затем вы определяете шаблон журнала, который использует эти значения с% X

%X{process-id}

Например, вы можно определить шаблон в приложении. свойства:

1008 *

или в логбеке. xml

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <layout>
      <Pattern>%-4r [%thread] %-5level %X{process-id} - msg%n</Pattern>
    </layout>       
</appender>
...