另外为了方便跟踪请求日志,一般会借助MDC在日志中输出traceId,但是跨线程执行的时候的,MDC信息并不会传递,所以需要自定义线程执行器。 启用Async Spring Boot配置Async 添加注解@EnableAsync @Slf4j@EnableAsync@SpringBootApplicationpublicclassAsyncApplicationimplementsApplicationRunner{@ResourceprivatePersonManagerpersonManager;...
另外为了方便跟踪请求日志,一般会借助MDC在日志中输出traceId,但是跨线程执行的时候的,MDC信息并不会传递,所以需要自定义线程执行器。 启用Async Spring Boot配置Async 添加注解@EnableAsync 代码语言:javascript 复制 @Slf4j @EnableAsync @SpringBootApplicationpublicclassAsyncApplicationimplementsApplicationRunner{@Resourcepriv...
必须在run方法之前,否则等异步线程执行的时候有可能MDC里面的值已经被清空了,这个时候就会返回nullMap<String, String> context = MDC.getCopyOfContextMap();super.execute(() -> {// 将父线程的MDC内容传给子线程if(context !=null) {
MDC.setContextMap(context); } else { //直接给子线程设置MDC MDC.put(Constants.LOG_MDC_ID, UUID.randomUUID().toString().replace("-", "")); } try { //执行任务 result = task.call(); } finally { try { MDC.clear(); } catch (Exception e) { log.warn("MDC clear exception", e);...
在Spring Boot 中,可以通过@EnableAsync注解来启动异步方法调用的支持,通过@Async注解来标识异步方法,让方法能够在异步线程中执行。下面分别介绍它们的使用方法。 1.@EnableAsync 注解 @EnableAsync是一个 Spring Boot 中用于启动异步方法调用的注解。使用@EnableAsync注解时,需要将其放置在一个配置类上,并且在配置类中通...
一、MDC 日志跟踪的核心方法 先讲一下 SpringBoot 请求的流转:请求到来先走的是 Filter(过滤器),然后走 Interceptor(拦截器),再走 Controller (路由器),再转到 Service(服务层),最后到持久层。日志跟踪的方式就是在 Filer 或 Interceptor 中填入 MDC 信息,这样根据 requestId 就可以串起来整个请求流程。
MDC.clear(); } } 2.2 使用JWT token过滤器的项目 springboot项目经常使用spring security+jwt来做权限限制,在这种情况下,我们通过新建filter过滤器来设置traceId,那么在验证token这部分的日志就不会带上traceId,因此我们需要把代码放在jwtFilter中,如图:
MDC(Mapped Diagnostic Context)是一个在日志框架中常用的概念,主要用于在多线程环境中关联和传递一些上下文信息,以便在日志输出中包含这些信息,从而实现更好的日志记录和调试。 在Java中,常见的日志框架如Log4j、Logback和Log4j2都提供了对MDC的支持。 MDC的主要特点包括: ...
Spring Boot 日志综合介绍 Spring Boot 内部代码使用的是 commons-logging 来记录日志的,但是底层日志实现框架是可以随意替换的。Spring Boot为 Java Util Logging, Log4J2,和 Logback 日志框架提供了默认配置。 Spring Boot支持的日志框架默认配置如下。 # LOGGING logging.config= # Location of the logging configurat...