在线网摘收藏?让Google来吧!

📅 发布时间:2026/7/6 16:15:41 👁️ 浏览次数:
在线网摘收藏?让Google来吧!
识吹种粱1、pom.xml 依赖复制代码org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.springframework.bootspring-boot-starter-loggingorg.projectlomboklombok1.16.10复制代码2、整合logback打印日志logback.xml (日志配置文件)关键代码[traceId:%X{traceId}]traceId是通过拦截器里MDC.put(traceId, tid)添加。复制代码[traceId:%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n${log}/%d{yyyy-MM-dd}.log30[traceId:%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n10MB复制代码3、application.yml指定logback.xml配置目录logging:config: classpath:logback.xml4、异步线程的跟踪ID链路追踪业务逻辑是基于线程数据的传递进行处理主线程传递线程ID到子线程。处理方式重写线程池的execute*、submit*方法。复制代码public final class MyThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {public MyThreadPoolTaskExecutor() {super();}Overridepublic void execute(Runnable task) {super.execute(TraceIdUtil.wrap(task, MDC.getCopyOfContextMap()));}Overridepublic Future submit(Callable task) {return super.submit(TraceIdUtil.wrap(task, MDC.getCopyOfContextMap()));}Overridepublic Future submit(Runnable task) {return super.submit(TraceIdUtil.wrap(task, MDC.getCopyOfContextMap()));}}复制代码4、异步定时任务线程接口ScheduledExecutorService的日志链路追踪。在执行前执行后进行跟踪ID的生成和删除。复制代码Bean(name scheduledExecutorService)protected ScheduledExecutorService scheduledExecutorService() {return new ScheduledThreadPoolExecutor(corePoolSize,new BasicThreadFactory.Builder().namingPattern(schedule-pool-%d).daemon(true).build(),new ThreadPoolExecutor.CallerRunsPolicy()) {Overrideprotected void beforeExecute(Thread thread, Runnable runnable) {super.beforeExecute(thread, runnable);// 为定时任务生成一个 traceIdTraceIdUtil.setTraceId();// 可选添加任务标识System.out.println(Scheduled task starting with traceId: TraceIdUtil.getTraceId());}Overrideprotected void afterExecute(Runnable r, Throwable t) {super.afterExecute(r, t);Threads.printException(r, t);TraceIdUtil.remove();}};}