...springboot项目中引入了skywalking,使用logback打印日志,后又引入了RMS监控,发现TID不再打印,TID为N/A
...TID能够正常打印
...
根据描述,可能是在引入 RMS 监控后,RMS 拦截了原来用于记录 TID 的变量或者 MDC 对象,导致 TID 无法正常打印。可以尝试以下几个步骤解决:
可以先将 RMS 监控暂时关闭,查看 TID 是否能够正常打印。如果 TID 能够正常打印,说明是 RMS 导致的问题。
查看 RMS 监控的配置文件,确认是否有针对 logback 的拦截器配置。如果有,可以尝试将其禁用,然后重启应用程序,查看 TID 是否能够正常打印。
如果 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 等。
如果以上方法都无法解决问题,可以尝试使用其他方式来记录 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 变量中。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。