引入sleuth,自定义Filter以及线程池日志无traceId

内容分享2天前发布
0 0 0

问题描述

项目引入spring-cloud-starter-sleuth,发现有些自定义Filter以及线程池异步线程日志无traceId.容易在日志排查中忽略掉,从而影响日志分析.

缘由分析以及解决方案

自定义Filter日志无traceId

  • 缘由(Filter优先级问题)
    sleuth框架的filter优先级为以下值

    引入sleuth,自定义Filter以及线程池日志无traceId

引入sleuth,自定义Filter以及线程池日志无traceId

  • 解决方案
    设置优先级高于上面的即可

    引入sleuth,自定义Filter以及线程池日志无traceId

线程池异步线程日志无traceId问题

  • 缘由
    线程池实例不在spring容器管理时,sleuth框架无法做处理

    如以下定义线程池方式不由spring管理

  1. 在类中声明为成员变量

    引入sleuth,自定义Filter以及线程池日志无traceId

  2. 在方法中声明线程池
  • 解决方案
  1. 在spring容器中注册线程池.如使用@Bean等
  2. 使用MDC获取再做处理(这个相对麻烦点,提议使用方法1)

String traceId = MDC.get("X-B3-TraceId");
String spanId = MDC.get("X-B3-SpanId");

© 版权声明

相关文章

暂无评论

none
暂无评论...