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

问题描述

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

原因分析以及解决方案

自定义Filter日志无traceId

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


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


    image.png

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

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


    如以下定义线程池方式不由spring管理
  1. 在类中声明为成员变量


    image.png
  2. 在方法中声明线程池
  • 解决方案
  1. 在spring容器中注册线程池.如使用@Bean等
  2. 使用MDC获取再做处理(这个相对麻烦点,建议使用方法1)
String traceId = MDC.get("X-B3-TraceId");
String spanId = MDC.get("X-B3-SpanId");
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。