【链路追踪】xxl-job定时任务日志增加traceId
xxl-job
xxl-job: 是一个分布式任务调度平台,核心设计目标是开发迅速、学习简单、轻量级、易扩展。
项目地址:https://gitcode.com/gh_mirrors/xx/xxl-job
免费下载资源
·
问题背景
项目中通过sleuth
实现了统一的traceId
注入,在生产环境进行日志追溯时比较方便。但是在使用xxl-job进行定时任务管理时,却发现xxl-job线程打印出来的日志没有traceId
,查询日志时十分不方便,于是通过使用Spring aop
的方式对使用了@XxlJob
注解的方法注入traceId
代码:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.MDC;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.cloud.sleuth.Span;
import org.springframework.stereotype.Component;
import java.util.UUID;
@Slf4j
@Aspect
@Component
public class XxlJobAspect {
/**
* 打印统一日志,注入traceId
* @author 只有影子
* @param joinPoint
*/
@Before("@annotation(com.xxl.job.core.handler.annotation.XxlJob)")
public void beforeMethod(JoinPoint joinPoint) {
// 注入traceId
// MDC` put的key可以自己定义,在我的项目里因为用的是`X-B3-TraceId`,所以用的是Span.TRACE_ID_NAME,这里填实际用到的key
MDC.put(Span.TRACE_ID_NAME,
UUID.randomUUID().toString());
// xxl定时任务统一日志
String className = joinPoint.getTarget().getClass().getSimpleName();
String methodName = joinPoint.getSignature().getName();
String args = JSON.toJSONString(joinPoint.getArgs(), SerializerFeature.IgnoreNonFieldGetter);
log.info("执行xxl-job自动任务:{}.{},参数:{}", className, methodName, args);
}
}
说明
通过增加以上类,即可实现traceId
注入,同时也增加了统一日志打印,不需要在每个定时任务入口都打印日志(如果不需要也可以去掉)。
GitHub 加速计划 / xx / xxl-job
27.15 K
10.79 K
下载
xxl-job: 是一个分布式任务调度平台,核心设计目标是开发迅速、学习简单、轻量级、易扩展。
最近提交(Master分支:3 个月前 )
e5d26ba2 - 3 个月前
977ad87b - 3 个月前
更多推荐
已为社区贡献3条内容
所有评论(0)