如何将 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 返回 VndError
。 VndError
指定一个 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。
我有一个 @ControllerAdvice
从 spring-hateoas 返回 VndError
。 VndError
指定一个 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。