开发者社区> 问答> 正文

在安装了RMS后,skywalking的tid不显示了

已解决

问题描述

...springboot项目中引入了skywalking,使用logback打印日志,后又引入了RMS监控,发现TID不再打印,TID为N/A

期望结果

...TID能够正常打印

已尝试的方法

...

展开
收起
7lyfg6ueawjdy 2023-03-24 16:41:48 155 0
1 条回答
写回答
取消 提交回答
  • 全栈JAVA领域创作者
    采纳回答

    根据描述,可能是在引入 RMS 监控后,RMS 拦截了原来用于记录 TID 的变量或者 MDC 对象,导致 TID 无法正常打印。可以尝试以下几个步骤解决:

    1. 确认是否是 RMS 导致的问题

    可以先将 RMS 监控暂时关闭,查看 TID 是否能够正常打印。如果 TID 能够正常打印,说明是 RMS 导致的问题。

    1. 查看 RMS 监控的配置文件

    查看 RMS 监控的配置文件,确认是否有针对 logback 的拦截器配置。如果有,可以尝试将其禁用,然后重启应用程序,查看 TID 是否能够正常打印。

    1. 尝试重新设置 MDC 变量

    如果 RMS 确实导致了 MDC 变量被清空,可以尝试在代码中重新设置 MDC 变量。可以在请求进入时,获取当前线程的 TID,然后将其设置到 MDC 中,例如:

    javaCopy Codeimport org.slf4j.MDC;
    import org.springframework.util.StringUtils;
    
    // 请求进入时,设置 MDC 变量
    String tid = getCurrentTid();
    if (StringUtils.hasText(tid)) {
        MDC.put("tid", tid);
    }
    
    // 请求处理完毕时,清除 MDC 变量
    MDC.remove("tid");
    

    其中,getCurrentTid() 方法可以根据具体情况自行实现,例如从请求头中获取 TID,或者生成一个 UUID 作为 TID 等。

    1. 尝试使用其他方式记录 TID

    如果以上方法都无法解决问题,可以尝试使用其他方式来记录 TID。例如,可以在日志输出时手动添加 TID,例如:

    javaCopy Codeimport org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class MyService {
        private static final Logger logger = LoggerFactory.getLogger(MyService.class);
    
        public void doSomething() {
            String tid = getCurrentTid();
            if (StringUtils.hasText(tid)) {
                logger.info("[{}]: Starting to do something...", tid);
            } else {
                logger.info("Starting to do something...");
            }
    
            // ...
        }
    }
    

    其中,getCurrentTid() 方法同样需要根据具体情况自行实现,但不需要将 TID 存储到 MDC 变量中。

    2023-03-26 17:26:49
    赞同 展开评论 打赏
问答分类:
问答地址:
关联地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载