我有一些使用go http的Web应用程序服务器,我希望每个请求都有uuid的上下文,为此,我可以使用http请求上下文 https://golang.org/pkg/net/http/#Request.Context
我们正在使用logrus,我们在一个文件中启动它,并在其他文件中使用记录器实例。
我需要的是在所有日志中打印请求ID,但不要在每个日志打印中添加新的paremeters,我想在每个http请求中对它做一次(传递req-id),所有日志打印都将拥有它而无需对它做任何事情
例如,如果这样会打印id=123log.info("foo")// id=123 foo
我已经尝试了以下内容,但不确定这是正确的方法,请建议。
package main
import (
"context"
"errors"
log "github.com/sirupsen/logrus"
)
type someContextKey string
var (
keyA = someContextKey("a")
keyB = someContextKey("b")
)
func main() {
ctx := context.Background()
ctx = context.WithValue(ctx, keyA, "foo")
ctx = context.WithValue(ctx, keyB, "bar")
logger(ctx, nil).Info("did nothing")
err := errors.New("an error")
logger(ctx, err).Fatal("unrecoverable error")
}
func logger(ctx context.Context, err error) *log.Entry {
entry := log.WithField("component", "main")
entry = entry.WithField("ReqID", "myRequestID")
return entry
}
https://play.golang.org/p/oCW09UhTjZ5
潇湘沐
相关分类