【问题标题】:How to fill Spring Cloud Sleuth Trace ID into logRef field of VndError in spring-hateoas?如何将 Spring Cloud Sleuth Trace ID 填充到 spring-hateoas 中 VndError 的 logRef 字段中?
【发布时间】:2018-11-08 08:08:18
【问题描述】:

我有一个 @ControllerAdvice,它从 spring-hateoas 返回 VndErrorVndError 指定了一个 logRef 字段,我应该在其中放置来自 Spring Cloud Sleuth 的 Trace 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

【问题讨论】:

  • 小样本是否有机会复制问题?
  • 嗨@MarcinGrzejszczak 我在上面添加了一些示例代码和项目,谢谢!
  • 你读过sleuth的文档吗?我们具体描述了如何检索跟踪上下文。您应该通过跟踪器使用第二种方式。
  • 谢谢,如果您想将其放入答案中,我会接受答案。我查看了cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/… Ctrl+F for currentSpan().context().traceIdString() 虽然没有显示任何命中,但如何提取跟踪 ID 并不是很明显。甚至 traceIdString() 也只显示了两个命中,并且它在 Spring Integration 部分的一些示例代码中。
  • 当然可以,再次感谢。

标签: spring spring-boot spring-hateoas spring-cloud-sleuth


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2017-10-04
    相关资源
    最近更新 更多