我们如何使用 logback.xml 和 MDC 在 spring-boot 日志记录中获取用户请求、响应和请求 ID 以及进程 ID?
How do we get user request, response, and request-id along with process-id in spring-boot logging using logback.xml and MDC?
我一直在尝试为我的 spring-boot 项目创建一个 logback.xml 日志模式我可以得到一些要求。
我想以日志模式打印数据(例如process-id,request-id,特定用户请求数据API 请求、用户响应等)使用 MDC 但我找不到任何关于 MDC 通信方式的解决方案使用 logback.xml
并插入所需的值。
我是 spring-boot 和 Java 开发的新手;请给我一些解决方案或想法。
您可以使用 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>
你好,我有一个解决方案,Apache-Log4j 给出的一个 class 是 ThreadContext。借助这个 class 我们可以 add/remove MDC 上下文中的数据。
请按照以下步骤操作:
- 创建一个 Servlet 过滤器或 Spring 给定过滤器。
- 从 'org.apache.logging.log4j' 包中导入 ThreadContext calss。
- 并在日志模式中添加“[%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。
我一直在尝试为我的 spring-boot 项目创建一个 logback.xml 日志模式我可以得到一些要求。
我想以日志模式打印数据(例如process-id,request-id,特定用户请求数据API 请求、用户响应等)使用 MDC 但我找不到任何关于 MDC 通信方式的解决方案使用 logback.xml
并插入所需的值。
我是 spring-boot 和 Java 开发的新手;请给我一些解决方案或想法。
您可以使用 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>
你好,我有一个解决方案,Apache-Log4j 给出的一个 class 是 ThreadContext。借助这个 class 我们可以 add/remove MDC 上下文中的数据。
请按照以下步骤操作:
- 创建一个 Servlet 过滤器或 Spring 给定过滤器。
- 从 'org.apache.logging.log4j' 包中导入 ThreadContext calss。
- 并在日志模式中添加“[%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。