Spring boot 将traceId添加到具有协同路由的kotlin反应式api
我有一个带有Kotlin/spring/Reactor/Coroutines的springapi 类似:Spring boot 将traceId添加到具有协同路由的kotlin反应式api,spring-boot,kotlin,spring-webflux,kotlin-coroutines,opentracing,Spring Boot,Kotlin,Spring Webflux,Kotlin Coroutines,Opentracing,我有一个带有Kotlin/spring/Reactor/Coroutines的springapi 类似:suspend fun method():字符串{return myService.data()} 我想将traceId添加到调用myService.data(), traceId来自标题中上面的调用(来自Jaerger/Opentracing) 作为解决方案,我找到了库:实现(“org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.3.9”) 当我
suspend fun method():字符串{return myService.data()}
我想将traceId添加到调用myService.data()
,
traceId来自标题中上面的调用(来自Jaerger/Opentracing)
作为解决方案,我找到了库:实现(“org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.3.9”)
当我打电话时,我应该输入代码:
withContext(MDCContext()) {
logger.info("call my service")
myService.data()
}
问题是:
如何将traceId从header
放入MDC协同路由上下文,可能需要添加WebFilter以获取请求头并创建类似于请求协同路由上下文的内容
有什么想法吗?关于@EugeneZacharov:
找到了如何获取上下文->Mono.deferWithContext{ctx->Mono.just(ctx)}.awaitFirst()
suspend fun Logger.debugWithMDC(message: String) {
if (isDebugEnabled) {
val context = Mono.deferWithContext { ctx -> Mono.just(ctx) }.awaitFirst()
context.copyToMdc()
this.debug(message)
MDC.clear()
}
}