如何将 Spring Cloud Sleuth Trace ID 填入 spring-hateoas 中 VndError 的 logRef 字段?

How to fill Spring Cloud Sleuth Trace ID into logRef field of VndError in spring-hateoas?

我有一个 @ControllerAdvice 从 spring-hateoas 返回 VndErrorVndError 指定一个 logRef 字段,我应该将来自 Spring Cloud Sleuth 的跟踪 ID 放在这里。有官方的方法可以做到这一点,还是我应该直接在我的 @ControllerAdvice @ExceptionHandler 方法中从 MDC 检索它?

示例控制器建议:

@ControllerAdvice
class ExceptionHandler {

    @Autowired
    private lateinit var tracer: Tracer

    @ExceptionHandler(LocalException::class)
    fun handleLocalException(e: LocalException): ResponseEntity<VndErrors.VndError> {
        val traceId = MDC.get("X-B3-TraceId") // <-- Is this the correct way of getting trace id from Sleuth?
        val traceId2 = tracer.currentSpan().context().traceIdString() // <-- Or something like this?
        val error = VndErrors.VndError(traceId, e.message)

        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error)
    }
}

GitHub 示例: https://github.com/hughwphamill/spring-traceid-logref

在文档中,我们描述了如何访问跟踪上下文。通过tracer接口获取trace id。