存储协程上下文的 RequestID

https://github.com/quanhengzhuang/requestid

本工具可以在 go 协程中维持一个不变的 requestID,以便能在记录日志时获取到这个 ID,将整个请求的的日志串起来,方便追踪问题。

虽然使用 context 可以达到同样的目的,但是这会要求所有的方法增加 context 参数,如果只用来传递这个 ID,成本过高,在实际工程中很痛苦。

本工具并未提供一个具体的 requestID 生成方法,可以使用类似 uuid 的算法,或类似 snowflake 的算法。

一般可以在 http 的 middleware 中Set,在 logger 中 Get。如果请求中开了新的 goroutine,还可以继续 Set。

以下是在一个 goroutine 中使用示例:

import (
    "github.com/ncfwx/x/requestid"
)

go func() {
    requestid.Set("my-request-id")
    defer requestid.Delete()

    func() {
        requestid.Get()
    }()
}()

0 个评论

要回复文章请先登录注册