我有一个带有Kotlin/spring/Rector/Coroutines的spring-api类似:suspend fun method(): String { return myService.data() }
我想添加traceId来调用CCD_ 2,traceId来自头中的调用(来自Jaerger/Opentraceing(
作为解决方案,我发现了库:实现("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()
- 添加WebFilter
- 将上面过滤器中的traceId标头复制到ReactorContext
- 添加ext fun,在需要时添加MDC数据:
suspend fun Logger.debugWithMDC(message: String) {
if (isDebugEnabled) {
val context = Mono.deferWithContext { ctx -> Mono.just(ctx) }.awaitFirst()
context.copyToMdc()
this.debug(message)
MDC.clear()
}
}
- 利润